Open9

Python コードメモ

しろしろ

画像ファイルをバイナリデータに変換するプログラム

import io
from PIL import Image
import os

# path = os.getcwd()
# print(path)
# new_dir = os.path.join(path, f'')

# 画像の読み込み
img_path = r'画像パス'
img = Image.open(img_path, mode='r')

# 画像のリサイズ
# (width, height) = (img.width // 2, img.height // 2)
# img = img.resize((width, height))

# 画像をバイナリ変換
with io.BytesIO() as img_bytes:
    img.save(img_bytes, format='PNG')
    img_bytes = img_bytes.getvalue()
    
# img_bytes = io.BytesIO()
# img.save(img_bytes, format='PNG')
# img_bytes = img_bytes.getvalue()

print(img_bytes)

# バイナリから画像の表示
# img = Image.open(io.BytesIO(img_bytes))
# (width, height) = (img.width * 2, img.height * 2)
# img = img.resize((width, height))
# img.show()
しろしろ

Python OpenCV画像サイズチェック

import cv2

# 画像読み込み
img = cv2.imread(r"test.png")

# 縦、横、色の次元数
height, width, channels = img.shape
print(f"width    : {width}")
print(f"height   : {height}")
print(f"channels : {channels}")

読み込んだ画像の結果例▼

width    : 512
height   : 1024
channels : 3
しろしろ

処理時間の計測

import time

start = time.time()

time.sleep(3)

end = time.time()

print(end - start)

しろしろ

coloramaをクラスにまとめたもの

from colorama import Fore, Back, Style, init
class Color:
    FORE_BLACK   = Fore.BLACK   # 黒 
    FORE_RED     = Fore.RED     # 赤 
    FORE_GREEN   = Fore.GREEN   # 緑 
    FORE_YELLOW  = Fore.YELLOW  # 黄 
    FORE_BLUE    = Fore.BLUE    # 青い 
    FORE_MAGENTA = Fore.MAGENTA # 赤紫色 
    FORE_CYAN    = Fore.CYAN    # シアン 
    FORE_WHITE   = Fore.WHITE   # 白い 
    FORE_RESET   = Fore.RESET   # リセット 

    ##### ライン #####
    BACK_BLACK   = Back.BLACK   # 黒
    BACK_RED     = Back.RED     # 赤
    BACK_GREEN   = Back.GREEN   # 緑
    BACK_YELLOW  = Back.YELLOW  # 黄
    BACK_BLUE    = Back.BLUE    # 青い
    BACK_MAGENTA = Back.MAGENTA # 赤紫色
    BACK_CYAN    = Back.CYAN    # シアン
    BACK_WHITE   = Back.WHITE   # 白い
    BACK_RESET   = Back.RESET   # リセット

    STYLE_DIM       = Style.DIM       # 暗い
    STYLE_NORMAL    = Style.NORMAL    # 正常
    STYLE_BRIGHT    = Style.BRIGHT    # 明るく
    STYLE_RESET_ALL = Style.RESET_ALL # スタイルリセット

class Escape:
    SCREEN_CLEAR    = "\033[2J" # 画面クリア
    RIGHTMOST_CLEAR = "\033[0K" # カーソル位置からその行の右端までをクリア
    LEFTMOST_CLEAR  = "\033[1K" # カーソル位置からその行の左端までをクリア
    CLEAR_ROW       = "\033[2K" # カーソル位置の行をクリア

    MOVING_RIGHT_ONE   = "\033[1C" # カーソルを1行だけ右に移動
    MOVING_RIGHT_TWO   = "\033[2C" # カーソルを2行だけ右に移動
    MOVING_RIGHT_THREE = "\033[3C" # カーソルを3行だけ右に移動
    
    MOVING_LEFT_ONE   = "\033[1D" # カーソルを1行だけ左に移動
    MOVING_LEFT_TWO   = "\033[2D" # カーソルを2行だけ左に移動
    MOVING_LEFT_THREE = "\033[3D" # カーソルを3行だけ左に移動
    
    UNDER_MOVE_ONE   = "\033[1B" # カーソルを1行だけ下に移動
    UNDER_MOVE_TWO   = "\033[2B" # カーソルを2行だけ下に移動
    UNDER_MOVE_THREE = "\033[3B" # カーソルを3行だけ下に移動

    ABOVE_MOVE_ONE   = "\033[1A" # カーソルを1行だけ上に移動
    ABOVE_MOVE_TWO   = "\033[2A" # カーソルを2行だけ上に移動
    ABOVE_MOVE_THREE = "\033[3A" # カーソルを3行だけ上に移動
しろしろ

python バージョン

import random

u = 0
c = random.randint(0, 2)

def judgeMatch(user, cpu):
    
    # python 3.10以上
    match (user - cpu + 3) % 3:
        case 0:
            return "あいこ"
        case 2:
            return "勝ち"
        case _:
            return "負け"

def judgeIf(user, cpu):
    result = (user - cpu + 3) % 3
    
    if result == 0:
        return "あいこ"
    elif result == 2:
        return "勝ち"
    else:
        return "負け"
        
print(judgeMatch(u, c))

https://staku.designbits.jp/check-janken/

しろしろ

ファイル保存するときに使えるコード

import os

def save_dir(save_dirs):

    for i in save_dirs:
        if not os.path.isdir(i):
            os.makedirs(i)

save_dirs = ['output\img']

save_dir(save_dirs)
しろしろ

現在の日付と時間取得

import datetime

now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
しろしろ

whisperインストール

pip install git+https://github.com/openai/whisper.git

ffmpeg

import whisper
import torch
from whisper.audio import N_FRAMES, pad_or_trim, log_mel_spectrogram
from whisper.tokenizer import get_tokenizer

import time

def voiceRecognition(audio):
    MODEL = whisper.load_model(r'base.pt')

    # binary_data = log_mel_spectrogram(r'test\test.wav')
    binary_data = log_mel_spectrogram(audio)

    # 30秒データに整形
    segment = pad_or_trim(binary_data, N_FRAMES).to(MODEL.device).to(torch.float16)

    # デコード
    deco = MODEL.decode(segment)

    # トークナイザ取得
    tokenizer = get_tokenizer(multilingual=True, language="ja", task="transcribe")

    # トークナイザのデコード
    result = tokenizer.decode(deco.tokens)
    return result

if __name__ == "__main__":
    res = voiceRecognition