python3.7を使用
タイトルではまとまりきらなかったので最終的に作りたいものをちゃんと説明すると,
・メイン内は無限ループ ー・cv2を利用し,webCamの画像を取得 ー・cv2で加工 ー・〃表示 ー・先頭に戻る
としているところを,
・マルチプロセス動作する関数内 ー・〃表示 ・メイン内は無限ループ ー・cv2を利用し,webCamの画像を取得 ー・cv2で加工 ー・先頭に戻る
として,表示のみマルチプロセス動作させたい.
そのためには,ndarrayを共有メモリに乗っける必要がありそうだと思ったので
次のurlのページの,サンプル2のコードを借りてその動作を試した.
https://qiita.com/maiueo/items/b3021a8803859d35a46f
実行すると以下のようなエラーを吐いた.
PS D:\Users\poly_Z\Documents\splatmusicprj> py -3.7 .\multiPictSample.py Traceback (most recent call last): File ".\multiPictSample.py", line 37, in <module> p.start() # プロセスの開始 File "C:\Users\poly_Z\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 112, in start self._popen = self._Popen(self) File "C:\Users\poly_Z\AppData\Local\Programs\Python\Python37\lib\multiprocessing\context.py", line 223, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\Users\poly_Z\AppData\Local\Programs\Python\Python37\lib\multiprocessing\context.py", line 322, in _Popen return Popen(process_obj) File "C:\Users\poly_Z\AppData\Local\Programs\Python\Python37\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__ reduction.dump(process_obj, to_child) File "C:\Users\poly_Z\AppData\Local\Programs\Python\Python37\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) _pickle.PicklingError: Can't pickle <class '__main__.c_ubyte_Array_3_Array_728'>: attribute lookup c_ubyte_Array_3_Array_728 on __main__ failed PS D:\Users\poly_Z\Documents\splatmusicprj> Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\poly_Z\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 99, in spawn_main new_handle = reduction.steal_handle(parent_pid, pipe_handle) File "C:\Users\poly_Z\AppData\Local\Programs\Python\Python37\lib\multiprocessing\reduction.py", line 82, in steal_handle _winapi.PROCESS_DUP_HANDLE, False, source_pid) OSError: [WinError 87] パラメーターが間違っています。
v = ndarrayToValue(input_img) # 画像を45度回転するプロセスを生成 p = mp.Process(target = filter, args = (v, )) p.start() # プロセスの開始
この辺りの動作がおかしいのだろうなというところまではわかるけれど,このサンプルを動かすためにはどうしたらよいのかわからないのでどなたかもし分かれば教えてください.
あなたの回答
tips
プレビュー