画像・動画ファイル読み込み方法 (フォルダ配下の画像/動画/ドキュメントを一括読み込み)
やりたいこと
ユーザーが指定したローカルフォルダにある下記ファイルを画像形式で読み込む
jpgファイル
pngファイル
aviファイル
mp4ファイル
pdf ファイル (各ページを画像として取得)
フォルダ・ファイルパスを指定すると拡張子からフォーマットを識別して取得
動画は全フレーム/PDFは全ページを読み込む
読み込み結果はpandas dataframeのリスト(ファイル数分)、ファイル名のリストとして出力する
事前準備
pdfファイルの読み込みにpdf2imageというライブラリを利用する
上記ライブラリはpopperというアプリを動かす必要があるため、下記サイトからダウンロードして保存する
解凍後にbinファイルのパスを環境変数に指定する必要がある。 下記githubのスクリプトではpythonファイル内でパスを指定する処理を入れているのでフォルダ名を変更すれば利用できる。
実装
実装結果
https://github.com/sd08419ttic/python_tech_memo
各フォーマットファイルをnumpy ndarray として読み込む
画像・動画はopencvの関数を利用する (動画はフレームを1フレームづつ読み込み、成功した場合は保持する)
pdfはPILファイルをndarrayに変換した後で、色の順序をBGRにして保存する
def read_image_data(self,filename): ''' 画像データを読みとる (jpg/png/bmp) ''' result = cv2.imread(filename) return result def read_movie_data(self,filename): ''' 動画ファイルを読み込む(avi,mp4,wmv) ''' result_list = [] try: cap = cv2.VideoCapture(filename) ret, frame = cap.read() #最初のフレームを取得 except: print(filename ,"could not loaded!") traceback.print_exc() return result_list indx = 0 while (cap.isOpened()): ret, frame = cap.read() #最初のフレームを取得 if ret == True: #読み込み成功判定 #img = cv2.cvtColor(frame, cv2.COLOR_BGR) result_list.append(frame) print("deb_movie",indx) indx = indx +1 else: break cap.release() return result_list def read_pdf_page(self,filename): ''' PDFファイルを画像として読み込む (ページを一括変換) ''' result_list = [] try: images = convert_from_path(filename) for indx in range(len(images)): img_temp = np.asarray(images[indx]) img_temp = img_temp[:, :, ::-1].copy() #RGB->BGR result_list.append(img_temp) except: print(filename, "could not loaded!") traceback.print_exc() result_list = null return result_list
参考サイト・書籍
参考書 Pythonではじめるデータラングリング ―データの入手、準備、分析、プレゼンテーション