【OpenCV】ラジコン自動運転のためのまだまだ初歩の初歩。。画像検出【チャイナWiFiCam】

昨日の続き

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

【忘備録】WiFi IP camera ストリーミング、コントロール等Vstarcam C7837WIP(W)【OpenCV】

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

【画像処理】Windows10に Python3.5 OpenCV3.1を入れてみる【Anaconda】

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

【妄想企画】Raspberry Pi 2 と OpenCV 3でラジコンの自動運転!?レースできたらおもろそう

一気にやるのは、大変なので、ひとつづつ組み合わせで・・まずはレーン検出的なところからやってみようかと。。でもその前に少しカメラで遊んでみます。

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 で 検出して、見つけた数だけ□で囲う。

2016-12-06-4

とりあえず、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"

としても、動くって、書いてあるけど・・動かない(^^;

2016-12-06-5

Picture size 0x0 is invalid って出て止まる。

ちなみに、その下のOpenCV Error は ファイルの時でも出てるけど、動いています(笑)

参考にしている所は

http://www.llul.info/entry/2016/03/29/Python%E3%81%A8OpenCV3%E3%81%A7%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0%E6%98%A0%E5%83%8F%E3%82%92%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%81%99%E3%82%8B%E6%96%B9

https://iwaki2009.blogspot.jp/2012/11/opencvip-camera.html

http://docs.opencv.org/3.0-last-rst/modules/videoio/doc/reading_and_writing_video.html#videocapture

http://funvision.blogspot.jp/2015/11/opencv-300-videocapture-file-web-camera.html

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

http://stackoverflow.com/questions/20891936/rtsp-stream-and-opencv-python

の情報を見ると、OpenCV3.1+Python3.4なら動いたって・・・(笑)

誰か教えて~~ (笑)  opencv_ffmpeg310.dll が問題なような・・・???雰囲気だけ

このストリーム入力ができたら、

https://github.com/commaai/openpilot

とか、Lane detection and Car detection みたいなことができるだろうし・・・

https://github.com/funningboy/carCV/tree/7d34d421965d1762ce97ac935ab8c33c6ac10153

いろいろできそうな感じがするんだけどなぁ~

5/23追記

Stackoverflowに、Videocaptureが動かないという記事があり。。PathとDLLの名前変更でできるという記述を発見。 そろそろ、またやってみるか・・(笑)

https://stackoverflow.com/questions/11699298/opencv-2-4-videocapture-not-working-on-windows

58down voteaccepted

Add C:\OpenCV\3rdparty\ffmpeg\ to the Windows PATH environment variable or copy opencv_ffmpeg.dll from that directory to C:\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

投稿者 tom2rd

コメントを残していただけるとありがたいです

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください