昨日の続き
昨日は、WiFiカメラのストリームを調査しました。

それを、Pythonで少しいじる。。Pythonの環境は、Spyderで動かしてます。

やりたいのは・・・ラズパイ(Raspberry Pi)でラジコン自動運転なんですが・・

一気にやるのは、大変なので、ひとつづつ組み合わせで・・まずはレーン検出的なところからやってみようかと。。でもその前に少しカメラで遊んでみます。
Wifi ONVIF Cameraのストリーム映像で、顔を検出して、その顔に合わせて、カメラのPTZ(パン・チルト)を動かして追跡させようかな?っていう例題をしてみようって思っています。
これも一気に行かないので、少しづつ(笑)
練習問題1(FaceDetection)
まずは、いろんなところに転がっている顔画像の検出(FaceDetection)
import cv2 ORG_WINDOW_NAME="org" faceCascade = cv2.CascadeClassifier("C:\\Users\\tominaga2\\Anaconda3\\pkgs\\opencv3-3.1.0-py35_0\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt2.xml") img = cv2.imread("image.jpg", cv2.IMREAD_COLOR) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(20, 20)) #cv2.namedWindow(ORG_WINDOW_NAME) #cv2.imshow(ORG_WINDOW_NAME, img) if len(face) > 0: for rect in face: cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=2) else: print("no face") cv2.imshow("faces",img) #cv2.imwrite('detected.jpg', img) cv2.waitKey(0)
cv2.imread って関数で、画像読み込んで、
CascadeClassifier に入れた分類器(正面の顔)で検出できるようにセットして
グレースケールにして、detectMultiScale で 検出して、見つけた数だけ□で囲う。
とりあえず、OpenCVが動くのを確認(^^;
って実はこれでかなりつまずいています(笑)
次はストリームをOpenCVで表示
なんだけど・・・Streamにすると動かない。。ファイルだったら動くのになぁ~
ファイルだと
import cv2 URL = "2_2016-12-06_21-47-59.mp4" s_video = cv2.VideoCapture(URL) print(s_video) while True: ret, img = s_video.read() cv2.imshow("Stream Video",img) key = cv2.waitKey(1) & 0xff if key == ord('q'): break
これで動いて・・
こんな感じなんだけど・・・
URL = "rtsp://user:pwd@ip:port/udp/av0_1"
としても、動くって、書いてあるけど・・動かない(^^;
Picture size 0x0 is invalid って出て止まる。
ちなみに、その下のOpenCV Error は ファイルの時でも出てるけど、動いています(笑)
参考にしている所は



RSTPでも取り込めるはずなんだけどなぁ~何か制限があるのかな??




の情報を見ると、OpenCV3.1+Python3.4なら動いたって・・・(笑)
誰か教えて~~ (笑) opencv_ffmpeg310.dll が問題なような・・・???雰囲気だけ
このストリーム入力ができたら、
とか、Lane detection and Car detection みたいなことができるだろうし・・・
いろいろできそうな感じがするんだけどなぁ~
5/23追記
Stackoverflowに、Videocaptureが動かないという記事があり。。PathとDLLの名前変更でできるという記述を発見。 そろそろ、またやってみるか・・(笑)




Add
C:\OpenCV\3rdparty\ffmpeg\
to the Windows PATH environment variable or copyopencv_ffmpeg.dll
from that directory toC:\Python27\
or to a directory that is in the PATH. Alternatively, use the OpenCV binaries from http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv.Renaming the
opencv_ffmpeg.dll
file may also be necessary.For OpenCV version X.Y.Z
opencv_ffmpeg.dll
==>opencv_ffmpegXYZ.dll
For 64-bit OpenCV version X.Y.Z
opencv_ffmpeg.dll
==>opencv_ffmpegXYZ_64.dll
と
With OpenCV 2.4.10, adding C:\opencv\sources\3rdparty\ffmpeg to Windows path and renaming opencv_ffmpeg.dll and opencv_ffmpeg_64.dll to opencv_ffmpeg2410.dll and opencv_ffmpeg2410_64.dll it works ! Thanks 🙂 I am now able to open MJPEG video files – Vincent Feb 18 ’15 at 7:59
Thanks – this works! It’s frustrating that this “silently fails” without that DLL copied in. I’d rather instead of a subtle false, a nice big exception “error, Danger Will Robinson, missing dll <…>” and then die. – Danny Staple Dec 13 ’15 at 21:26
I would recommend the second option (using the OpenCV binaries from lfd.uci.edu/~gohlke/pythonlibs/#opencv). It’s cleaner and pretty straightforward. Thanks for the help. – Victor Oliveira Antonino Dec 13 ’16 at 20:29