質問編集履歴

3

エラー箇所の引用、追記を行いました。 宜しくお願いします

2016/12/16 09:22

投稿

CygMin
CygMin

スコア17

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  ### 試したこと
28
28
 
29
- LinuxでopenCVのoptical flowを使おうと思い, 以下のqiitaの記事を参考にサンプルコードを試してみたところ, 以下のエラーが生じました。
29
+ LinuxでopenCVのoptical flowを使おうと思い, 以下のqiitaの記事に記載されているサンプルコードを試してみたところ, 以下のエラーが生じました。
30
30
 
31
31
 
32
32
 
@@ -36,220 +36,94 @@
36
36
 
37
37
 
38
38
 
39
+
40
+
41
+ 結果:
42
+
43
+ ```
44
+
45
+ OpenCV Error: Assertion failed (scn == 3 || scn == 4) in ipp_cvtColor, file /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgproc/src/color.cpp, line 7456
46
+
47
+ Traceback (most recent call last):
48
+
49
+ File "LucasKande.py", line 24, in <module>
50
+
51
+ gray_prev = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
52
+
53
+ cv2.error: /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgproc/src/color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor
54
+
55
+
56
+
57
+ ```
58
+
59
+
60
+
61
+ このエラーがLinx特有のものだと分かったのは, 全く同じコードをWindows上で構築した同様の環境では正常に動いた為です。
62
+
63
+
64
+
65
+ このエラーを検索したところ, ffmpegを導入すればよいらしいと分かり, 導入。
66
+
67
+
68
+
69
+ ```
70
+
71
+ $ sudo add-apt-repository ppa:mc3man/trusty-media
72
+
73
+ $ sudo apt-get update
74
+
75
+ $ sudo apt-get install ffmpeg
76
+
77
+ ```
78
+
79
+
80
+
81
+ 再度サンプルコードを試しても, 同じエラーを吐いてしまう。
82
+
83
+
84
+
85
+ ファイル関連でエラーが生じているようなので, pythonのインタプリタでVideoCaptureが正常に動作しているか確認しました。
86
+
87
+
88
+
39
89
  ```python
40
90
 
41
- # coding: utf-8
42
-
43
-
44
-
45
- import numpy as np
46
-
47
- import cv2
48
-
49
-
50
-
51
- cap = cv2.VideoCapture('../res/768x576.avi')
52
-
53
-
54
-
55
- # Shi-Tomasiのコーナー検出パラメータ
56
-
57
- feature_params = dict( maxCorners = 100,
58
-
59
- qualityLevel = 0.3,
60
-
61
- minDistance = 7,
62
-
63
- blockSize = 7 )
64
-
65
-
66
-
67
- # Lucas-Kanade法のパラメータ
68
-
69
- lk_params = dict( winSize = (15,15),
70
-
71
- maxLevel = 2,
72
-
73
- criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
74
-
75
-
76
-
77
- # ランダムに色を100個生成(値0~255の範囲で100行3列のランダムなndarrayを生成)
78
-
79
- color = np.random.randint(0, 255, (100, 3))
80
-
81
-
82
-
83
- # 最初のフレームの処理
84
-
85
- end_flag, frame = cap.read()
86
-
87
- gray_prev = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
88
-
89
- feature_prev = cv2.goodFeaturesToTrack(gray_prev, mask = None, **feature_params)
90
-
91
- mask = np.zeros_like(frame)
92
-
93
-
94
-
95
- while(end_flag):
96
-
97
- # グレースケールに変換
98
-
99
- gray_next = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
100
-
101
-
102
-
103
- # オプティカルフロー検出
104
-
105
- feature_next, status, err = cv2.calcOpticalFlowPyrLK(gray_prev, gray_next, feature_prev, None, **lk_params)
106
-
107
-
108
-
109
- # オプティカルフローを検出した特徴点を選別(0:検出せず、1:検出した)
110
-
111
- good_prev = feature_prev[status == 1]
112
-
113
- good_next = feature_next[status == 1]
114
-
115
-
116
-
117
- # オプティカルフローを描画
118
-
119
- for i, (next_point, prev_point) in enumerate(zip(good_next, good_prev)):
120
-
121
- prev_x, prev_y = prev_point.ravel()
122
-
123
- next_x, next_y = next_point.ravel()
124
-
125
- mask = cv2.line(mask, (next_x, next_y), (prev_x, prev_y), color[i].tolist(), 2)
126
-
127
- frame = cv2.circle(frame, (next_x, next_y), 5, color[i].tolist(), -1)
128
-
129
- img = cv2.add(frame, mask)
130
-
131
-
132
-
133
- # ウィンドウに表示
134
-
135
- cv2.imshow('window', img)
136
-
137
-
138
-
139
- # ESCキー押下で終了
140
-
141
- if cv2.waitKey(30) & 0xff == 27:
142
-
143
- break
144
-
145
-
146
-
147
- # 次のフレーム、ポイントの準備
148
-
149
- gray_prev = gray_next.copy()
150
-
151
- feature_prev = good_next.reshape(-1, 1, 2)
152
-
153
- end_flag, frame = cap.read()
154
-
155
-
156
-
157
- # 終了処理
158
-
159
- cv2.destroyAllWindows()
160
-
161
- cap.release()
162
-
163
- ```
164
-
165
-
166
-
167
- 結果:
168
-
169
- ```
170
-
171
- OpenCV Error: Assertion failed (scn == 3 || scn == 4) in ipp_cvtColor, file /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgproc/src/color.cpp, line 7456
172
-
173
- Traceback (most recent call last):
174
-
175
- File "LucasKande.py", line 24, in <module>
176
-
177
- gray_prev = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
178
-
179
- cv2.error: /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgproc/src/color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor
180
-
181
-
182
-
183
- ```
184
-
185
-
186
-
187
- このエラーがLinx特有のものだと分かったのは, 全く同じコードをWindows上で構築した同様の環境では正常に動いた為です。
188
-
189
-
190
-
191
- このエラーを検索したところ, ffmpegを導入すればよいらしいと分かり, 導入。
192
-
193
-
194
-
195
- ```
196
-
197
- $ sudo add-apt-repository ppa:mc3man/trusty-media
198
-
199
- $ sudo apt-get update
200
-
201
- $ sudo apt-get install ffmpeg
202
-
203
- ```
204
-
205
-
206
-
207
- 再度サンプルコードを試しても, 同じエラーを吐いてしまう。
208
-
209
-
210
-
211
- ファイル関連でエラーが生じているようなので, pythonのインタプリタでVideoCaptureが正常に動作しているか確認しました。
91
+ >>> import cv2
92
+
93
+ >>> cap = cv2.VideoCapture("../res/768x576.avi")
94
+
95
+ >>> cap.isOpened()
96
+
97
+ False
98
+
99
+ >>> cap.open("../res/768x576.avi")
100
+
101
+ False
102
+
103
+ >>>
104
+
105
+
106
+
107
+ ```
108
+
109
+
110
+
111
+ どうやら, VideoCaptureでファイルを開けていないっぽい。
112
+
113
+ 念の為ファイルが有効か調べました。
212
114
 
213
115
 
214
116
 
215
117
  ```python
216
118
 
217
- >>> import cv2
119
+ >>> import os.path
218
-
219
- >>> cap = cv2.VideoCapture("../res/768x576.avi")
120
+
220
-
221
- >>> cap.isOpened()
222
-
223
- False
224
-
225
- >>> cap.open("../res/768x576.avi")
121
+ >>> os.path.exists('../res/768x576.avi')
226
-
122
+
227
- False
123
+ True
228
124
 
229
125
  >>>
230
126
 
231
-
232
-
233
- ```
234
-
235
-
236
-
237
- どうやら, VideoCaptureでファイルを開けていないっぽい。
238
-
239
- 念の為ファイルが有効か調べました。
240
-
241
-
242
-
243
- ```python
244
-
245
- >>> import os.path
246
-
247
- >>> os.path.exists('../res/768x576.avi')
248
-
249
- True
250
-
251
- >>>
252
-
253
127
  ```
254
128
 
255
129
 
@@ -322,7 +196,7 @@
322
196
 
323
197
  $ cd build
324
198
 
325
- $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON ..
199
+ $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=ON -D BUILD_opencv_python2=ON ../opencv-3.0.0
326
200
 
327
201
  ```
328
202
 
@@ -336,13 +210,15 @@
336
210
 
337
211
  outputが8だったので, 以下のオプションをつけてmake
338
212
 
213
+ 気長に待ちます。
214
+
339
215
  ```
340
216
 
341
217
  $ make -j8
342
218
 
343
219
  ```
344
220
 
345
- すると以下のメッセージが出力された。
221
+ すると以下のメッセージが出力されました。
346
222
 
347
223
  ```
348
224
 
@@ -356,14 +232,98 @@
356
232
 
357
233
  ...allって何だ
358
234
 
235
+
236
+
237
+ アドバイスを求めたところ, allは「全体をビルドする過程のどこかでエラーが出て止まってしまった」ことを意味しているとのこと。(ご回答有難うございます)
238
+
239
+ エラーの解決の為には根本原因となっているエラーメッセージが必要とのことなので, もう一度ビルド作業をやり直しました。
240
+
241
+ $ make -j8を行った直後の状態で, 端末で「エラー」を検索。
242
+
243
+ ヒットした箇所の周辺から最後までを引用...しようと思ったけど, teratailの字数制約に引っかかったので怪しいと思われる箇所を抜粋しました。
244
+
245
+
246
+
359
- ```
247
+ ```
248
+
360
-
249
+ Scanning dependencies of target opencv_perf_cudabgsegm
250
+
251
+ [ 68%] Building CXX object modules/cudabgsegm/CMakeFiles/opencv_perf_cudabgsegm.dir/perf/perf_main.cpp.o
252
+
253
+ //usr/lib/libvtkIO.so.5.10: `TIFFReadDirectory@LIBTIFF_4.0' に対する定義されていない参照です
254
+
255
+ //usr/lib/libvtkIO.so.5.10: `TIFFIsTiled@LIBTIFF_4.0' に対する定義されていない参照です
256
+
257
+ //usr/lib/libvtkIO.so.5.10: `TIFFScanlineSize@LIBTIFF_4.0' に対する定義されていない参照です
258
+
259
+ //usr/lib/libvtkIO.so.5.10: `TIFFClose@LIBTIFF_4.0' に対する定義されていない参照です
260
+
261
+ //usr/lib/libvtkIO.so.5.10: `TIFFGetFieldDefaulted@LIBTIFF_4.0' に対する定義されていない参照です
262
+
263
+ //usr/lib/libvtkIO.so.5.10: `TIFFSetWarningHandler@LIBTIFF_4.0' に対する定義されていない参照です
264
+
265
+ //usr/lib/libvtkIO.so.5.10: `_TIFFmalloc@LIBTIFF_4.0' に対する定義されていない参照です
266
+
267
+ //usr/lib/libvtkIO.so.5.10: `TIFFDefaultStripSize@LIBTIFF_4.0' に対する定義されていない参照です
268
+
269
+ //usr/lib/libvtkIO.so.5.10: `TIFFReadTile@LIBTIFF_4.0' に対する定義されていない参照です
270
+
271
+ //usr/lib/libvtkIO.so.5.10: `TIFFWriteScanline@LIBTIFF_4.0' に対する定義されていない参照です
272
+
273
+ //usr/lib/libvtkIO.so.5.10: `_TIFFfree@LIBTIFF_4.0' に対する定義されていない参照です
274
+
275
+ //usr/lib/libvtkIO.so.5.10: `TIFFGetField@LIBTIFF_4.0' に対する定義されていない参照です
276
+
277
+ //usr/lib/libvtkIO.so.5.10: `TIFFClientOpen@LIBTIFF_4.0' に対する定義されていない参照です
278
+
279
+ //usr/lib/libvtkIO.so.5.10: `TIFFNumberOfDirectories@LIBTIFF_4.0' に対する定義されていない参照です
280
+
281
+ //usr/lib/libvtkIO.so.5.10: `TIFFOpen@LIBTIFF_4.0' に対する定義されていない参照です
282
+
283
+ //usr/lib/libvtkIO.so.5.10: `TIFFReadRGBAImage@LIBTIFF_4.0' に対する定義されていない参照です
284
+
285
+ //usr/lib/libvtkIO.so.5.10: `TIFFSetField@LIBTIFF_4.0' に対する定義されていない参照です
286
+
287
+ //usr/lib/libvtkIO.so.5.10: `TIFFSetErrorHandler@LIBTIFF_4.0' に対する定義されていない参照です
288
+
289
+ //usr/lib/libvtkIO.so.5.10: `TIFFSetDirectory@LIBTIFF_4.0' に対する定義されていない参照です
290
+
291
+ //usr/lib/libvtkIO.so.5.10: `TIFFReadScanline@LIBTIFF_4.0' に対する定義されていない参照です
292
+
293
+ //usr/lib/libvtkIO.so.5.10: `TIFFNumberOfTiles@LIBTIFF_4.0' に対する定義されていない参照です
294
+
295
+ collect2: error: ld returned 1 exit status
296
+
297
+ modules/viz/CMakeFiles/opencv_test_viz.dir/build.make:238: ターゲット 'bin/opencv_test_viz' のレシピで失敗しました
298
+
299
+ make[2]: *** [bin/opencv_test_viz] エラー 1
300
+
301
+ CMakeFiles/Makefile2:3793: ターゲット 'modules/viz/CMakeFiles/opencv_test_viz.dir/all' のレシピで失敗しました
302
+
303
+ make[1]: *** [modules/viz/CMakeFiles/opencv_test_viz.dir/all] エラー 2
304
+
305
+ make[1]: *** 未完了のジョブを待っています....
306
+
307
+
308
+
309
+ (中略)
310
+
311
+
312
+
313
+ Scanning dependencies of target opencv_cudafilters
314
+
315
+ [ 74%] Building CXX object modules/cudafilters/CMakeFiles/opencv_cudafilters.dir/src/filtering.cpp.o
316
+
317
+ [ 74%] Linking CXX shared library ../../lib/libopencv_cudafilters.so
318
+
319
+ [ 74%] Built target opencv_cudafilters
320
+
321
+ Makefile:149: ターゲット 'all' のレシピで失敗しました
322
+
361
- sudo make install
323
+ make: *** [all] エラー 2
362
-
324
+
363
- ```
325
+ ```
364
-
365
- 構わずmake installをすると, 同様のエラーが返されます。当然OpenCVがインストールされている筈もなく...
326
+
366
-
367
-
368
-
327
+
328
+
369
- どなたかアドバイス願います。
329
+ アドバイス願います。

2

OpenCVのビルドを行い, その手順を追記しました。 ビルドは失敗に終わりましたが\.\.\.

2016/12/16 09:22

投稿

CygMin
CygMin

スコア17

test CHANGED
File without changes
test CHANGED
@@ -268,4 +268,102 @@
268
268
 
269
269
  PythonもopenCVも初心者なので, 検討違いのアプローチをしているかもしれませんがご了承下さい。
270
270
 
271
- 複数のサンプルコードを眺めた限り, optical flowを使うには取り敢えずVideoCaptureを用いているので, これが動かない限りはoptical flowは使えないのかな、と思ったりしてます。
271
+
272
+
273
+ ###追記
274
+
275
+ ####OpenCVのビルドを試す
276
+
277
+ 編集・追記依頼でopencvのFFmpeg機能をOpenCVから使うにはオプションを有効にする必要があるとコメントを頂いたので, 恐々ビルドインストールを敢行致しました。 ビルドの方法は以下のサイトを参考にしました。
278
+
279
+
280
+
281
+ - リンク1: [Ubuntu14.04にpython用にOpenCV3.0.0をインストール](http://qiita.com/bohemian916/items/23abea5ef9fadcc8bce0)
282
+
283
+ - リンク2: [OpenCV3.1.0のインストールメモ (Ubuntu 14.04 LTS)](http://umejan.hatenablog.com/entry/2016/04/20/233642)
284
+
285
+ - リンク3: [OpenCV Ubuntu Documentation](https://help.ubuntu.com/community/OpenCV)
286
+
287
+
288
+
289
+ まずはディレクトリの作成とopencvのzipをダウンロードして展開
290
+
291
+ リンク3の情報から, 既にffmpegがインストールされている場合は取り除いておいた方が良さそうなので, remove
292
+
293
+
294
+
295
+ ```
296
+
297
+ $ mkdir OpenCV
298
+
299
+ $ cd OpenCV
300
+
301
+ $ sudo apt-get -qq remove ffmpeg
302
+
303
+ $ wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.0.0/opencv-3.0.0.zip
304
+
305
+ $ unzip opencv-3.0.0.zip
306
+
307
+ ```
308
+
309
+ リンク2のコメントから, libtiff4-devをlibtiff5-devに変更してrequirementをインストール
310
+
311
+ ```
312
+
313
+ $ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev
314
+
315
+ ```
316
+
317
+ requirementがインストールできたら, いよいよビルドです。リンク1に「ubuntuでは、WITH_FFMPEG=OFFを忘れずに。」と記載されているのは見なかったことにしてWITH_FFMPEG=ONにしてcmake
318
+
319
+ ```
320
+
321
+ $ mkdir build
322
+
323
+ $ cd build
324
+
325
+ $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON ..
326
+
327
+ ```
328
+
329
+ make用にコア数を調べて,
330
+
331
+ ```
332
+
333
+ $ grep -c ^processor /proc/cpuinfo
334
+
335
+ ```
336
+
337
+ outputが8だったので, 以下のオプションをつけてmake
338
+
339
+ ```
340
+
341
+ $ make -j8
342
+
343
+ ```
344
+
345
+ すると以下のメッセージが出力された。
346
+
347
+ ```
348
+
349
+ Makefile:149: ターゲット 'all' のレシピで失敗しました
350
+
351
+ make: *** [all] エラー 2
352
+
353
+ ```
354
+
355
+ makeの進捗が75%で止まっている。allってファイルが無いらしい。
356
+
357
+ ...allって何だ
358
+
359
+ ```
360
+
361
+ sudo make install
362
+
363
+ ```
364
+
365
+ 構わずmake installをすると, 同様のエラーが返されます。当然OpenCVがインストールされている筈もなく...
366
+
367
+
368
+
369
+ どなたかアドバイス願います。

1

OpenCVの導入方法について追記致しました。

2016/12/16 08:02

投稿

CygMin
CygMin

スコア17

test CHANGED
@@ -1 +1 @@
1
- Linux - openCV VideoCaptureが動作しない
1
+ Linux - OpenCV VideoCaptureが動作しない
test CHANGED
@@ -4,7 +4,17 @@
4
4
 
5
5
  - python 3.5.2 (Anaconda 2.5.0 64bit)
6
6
 
7
- - opencv 3.1.0
7
+ - opencv 3.1.0 (condaによるインストール)
8
+
9
+
10
+
11
+ ※ OpenCVはcondaにより導入しています。
12
+
13
+ ```
14
+
15
+ conda install -c https://conda.anaconda.org/menpo opencv3
16
+
17
+ ```
8
18
 
9
19
 
10
20