①EC2をCUDA用に作成する

②Anaconda Promptを開いて環境構築

 

新しい環境を作成

conda create -n cuda_env python=3.8
conda activate cuda_env

 

必要なパッケージをインストール

conda install numpy
conda install -c conda-forge numba
conda install -c conda-forge pillow

 

 

③CUDAを利用して画像を白黒(グレースケール)に変換するソースコード。フィル名「convert_to_grayscale.py」

 

from PIL import Image
from numba import cuda
import numpy as np
from tkinter import Tk, filedialog

@cuda.jit
def rgb_to_grayscale_kernel(d_input, d_output, width, height):
    x, y = cuda.grid(2)
    if x < width and y < height:
        r = d_input[y, x, 0]
        g = d_input[y, x, 1]
        b = d_input[y, x, 2]
        gray = 0.299 * r + 0.587 * g + 0.114 * b
        d_output[y, x] = gray

def rgb_to_grayscale(image_array):
    height, width, _ = image_array.shape
    d_input = cuda.to_device(image_array)
    d_output = cuda.device_array((height, width), dtype=np.float32)

    threads_per_block = (16, 16)
    blocks_per_grid_x = (width + threads_per_block[0] - 1) // threads_per_block[0]
    blocks_per_grid_y = (height + threads_per_block[1] - 1) // threads_per_block[1]
    blocks_per_grid = (blocks_per_grid_x, blocks_per_grid_y)

    rgb_to_grayscale_kernel[blocks_per_grid, threads_per_block](d_input, d_output, width, height)
    
    return d_output.copy_to_host()

def main():
    # ファイルダイアログを使用して画像ファイルを選択
    root = Tk()
    root.withdraw()  # Tkinterウィンドウを表示しない
    input_image_path = filedialog.askopenfilename(title='Select an image file', filetypes=[('Image Files', '*.jpg;*.jpeg;*.png')])

    if not input_image_path:
        print("No file selected")
        return

    output_image_path = 'output.jpg'
    
    image = Image.open(input_image_path)
    image_array = np.array(image)
    
    gray_image_array = rgb_to_grayscale(image_array)
    gray_image = Image.fromarray(np.uint8(gray_image_array))

    gray_image.save(output_image_path)
    print(f'Gray image saved to {output_image_path}')

if __name__ == '__main__':
    main()

 

 

④画像を選択する(私のデスクトップにあるサンプル画像)


 

 

⑤CUDAの情報を確認

 

⑥白黒にするPythonファイルを実行

python convert_to_grayscale.py

 

⑦ output.jpgという白黒画像が生成される。

 

以上