私は画像を切り取って保存する簡単なコードを書いています。
しかし、問題は、画像の数が約150,000以上であり、速度を向上させたいということです。
Pythonマルチプロセッシング - 速度向上のためにワークロードを分割するにはどうすればよいですか?
だから、最初に私は、次のように、forループシンプルなコードを書いた:
import cv2
import numpy
import sys
textfile=sys.argv[1]
file_list=open(textfile)
files=file_list.read().split('\n')
idx=0
for eachfile in files:
image=cv2.imread(eachfile)
idx+=1
if image is None:
pass
outName=eachfile.replace('/data','/changed_data')
if image.shape[0]==256:
image1=image[120:170,120:170]
elif image.shape[0]==50:
image1=image
cv2.imwrite(outName,image1)
print idx,outName
このコードは、90000のイメージに約38秒かかりました。 しかし、デュアルコアを使用すると、単一のプロセスより時間がかかりました。同じ90000のイメージでは約48秒でした。
import cv2
import sys
import numpy
from multiprocessing import Pool
def crop(eachfile):
image=cv2.imread(eachfile)
idx+=1
if image is None:
pass
outName=eachfile.replace('/data','/changed_data')
if image.shape[0]==256:
image1=image[120:170,120:170]
elif image.shape[0]==50:
image1=image
cv2.imwrite(outName,image1)
print idx,outName
if __name__=='__main__':
textfile=sys.argv[1]
file_list=open(textfile)
files=file_list.read().split('\n')
pool=Pool(2)
pool.map(crop,files)
私はプロセスをスピードアップするために正しいことをしていますか?または、リストを分割して各リストをプロセスに送信する必要がありますか?
私のコードはすばらしいと思いますか?
ありがとうございます!!!
btw、プログラムは\ n文字で区切られたファイルでテキストファイルを読み込んでいます。 – user103192