python+opencv+caffe+카메라 가 대상 검 측 을 위 한 인 스 턴 스 코드
그래서 카메라 로 이미 지 를 가 져 오고 Python 으로 CAFFE 인 터 페 이 스 를 호출 하여 목표 인식 을 실현 합 니 다.
우선 카 메 라 는 리 눅 스 만능 구동 호 환 V4L 2 를 지원 하 는 카 메 라 를 선택 하 세 요.
ARM 을 배 울 때 사용 하 던 Smart 210 을 사용 해서 제 카메라 가 지원 하 는 것 을 확 인 했 기 때 문 입 니 다.
제 가 카 메 라 를 꽂 으 면 자 연 스 럽 게/dev 디 렉 터 리 에서 비디오 0 파일 이 하나 더 보 입 니 다.
이것 이 바로 카메라 의 장치 파일 이기 때문에 나 는 구동 부분 을 추가 로 처리 하지 않 았 다.
환경
다시 시작 하기 전에 국 감 된 가이드 북 에 따라 설 치 된 opencv 3.2 는 V4L 2 및 GTK 가 켜 지지 않 았 기 때 문 입 니 다.2.x 의 지원,
그래서 뒤에 일련의 문제 가 발생 했 습 니 다.아래 의 방법 으로 검 측 해 주 십시오.
$ python
1.Python 의 V4L 2 지원 및 카메라 구동 이 정상 인지 확인Python 에 들 어가 면 다음 명령 이 있 습 니 다.
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cap = cv2.VideoCapture(0)
>>> print cap.isOpened()
True
>>>
True 로 돌아 가면 카메라 와 opencv 의 V4L 2 지원 이 정상 입 니 다.False 로 돌아 가면 opencv 나 카메라 에 문제 가 있다 는 뜻 입 니 다.
2.카메라 의 영상 을 창 으로 만들어 야 하기 때문에 Python 의 gtk 지원 을 확인 해 야 합 니 다.
>>> import cv2
>>> cv2.namedWindow('test',cv2.WINDOW_AUTOSIZE)
>>>
아무런 잘못 도 신고 하지 않 았 다 면 gtk 도 정상 이라는 뜻 입 니 다.하면,만약,만약...
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows,
GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config,
then re-run cmake or configure script) in cvNamedWindow,
그럼 opencv 가 gtk 를 지원 하지 않 는 다 는 뜻 입 니 다.만약 위의 두 테스트 가 모두 잘 된다 면 너 는 이 절 차 를 뛰 어 넘 을 수 있다.
우선 저 는 opencv 를 어떻게 다시 컴 파일 하 든 python 에 문제 가 있다 는 것 을 알 게 되 었 습 니 다.
마지막 으로 python-opencv 가방 을 언제 담 았 는 지 모 르 기 때 문 이 었 어 요.
명령 사용 가능
$ pip list |grep opencv
opencv 와 관련 된 가방 이 발견 되면 pip uninstall xxx 를 이용 하여 제거 할 수 있 습 니 다.pythom-opencv 가방 을 봤 다 고 가정 하면 pip uninstall opencv-python 에서 제거 합 니 다.
그리고 dpkg-i|grep opencv 를 검사 합 니 다.python opencv 와 관련 된 가방 도 제거 해 야 합 니 다.
$ sudo apt-get remove python-opencv
그리고 오픈 cv 3.2 의 원본 디 렉 터 리 를 설치 하고,
$ cd build
$ make uninstall
이렇게 하면 이전에 설치 한 opencv 를 마 운 트 해제 합 니 다.V4L 헤더 파일 의 이름 이 바 뀌 었 지만 opencv 는 기본적으로 linux/videodev.h 를 사용 하기 때문에 소프트 연결 을 해 야 합 니 다.
$ ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
opencv 설치 과정 에서 관련 가방 과 의존 도 를 자동 으로 감지 합 니 다.제 가 설치 한 가방 을 먼저 보 여 드 리 겠 습 니 다.하지만 환경 이 다소 다 르 기 때문에 부족 한 가방 을 보 는 방법 을 알려 드 리 겠 습 니 다.
$ sudo apt-get install libgphoto2-dev v4l2ucp libv4l-dev dv4l libwebcam0-dev libgtkglext1-dev libunicap2-dev
cmake 를 다시 실행 합 니 다.
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON -D WITH_V4L=ON -D WITH_GTK=ON -D WITH_GTK_2_X -D WITH_OPENGL=ON \
-D WITH_CUDA=ON -D WITH_CUBLAS=ON -D BUILD_PYTHON_SUPPORT=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.2.0/modules/ ../opencv-3.2.0
그 중에서 도 V4L 2 가 share 라 이브 러 리 를 사용 하면-D WITHV4L:=ON 으로 바꾸다
-D WITH_LIBV4L=ON
cmake 과정 에서 다음 과 같은 힌트 가 있 습 니 다.
Detected version of GNU GCC: 54 (504)
FP16: Feature disabled
Found OpenEXR: /usr/lib/x86_64-linux-gnu/libIlmImf.so
Checking for module 'libucil'
No package 'libucil' found
Looking for linux/videodev.h
Looking for linux/videodev.h - found
Looking for linux/videodev2.h
Looking for linux/videodev2.h - found
Looking for sys/videoio.h
Looking for sys/videoio.h - not found
Checking for module 'libavresample'
No package 'libavresample' found
Found TBB: build
found IPP (ICV version): 9.0.1 [9.0.1]
at: /mnt/sdb/ubuntu/install/opencv/build/3rdparty/ippicv/ippicv_lnx
CUDA detected: 8.0
CUDA NVCC target flags: -gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_52,code=sm_52;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_61,code=sm_61;-D_FORCE_INLINES
LAPACK_IMPL: Atlas, LAPACK_LIBRARIES: /usr/lib/liblapack.so;/usr/lib/libcblas.so;/usr/lib/libatlas.so
Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
Could NOT find Matlab (missing: MATLAB_MEX_SCRIPT MATLAB_INCLUDE_DIRS MATLAB_ROOT_DIR MATLAB_LIBRARIES MATLAB_LIBRARY_DIRS MATLAB_MEXEXT MATLAB_ARCH MATLAB_BIN)
VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
General configuration for OpenCV 3.2.0 =====================================
Version control: unknown
Platform:
Timestamp: 2017-08-14T00:31:55Z
Host: Linux 4.10.0-30-generic x86_64
CMake: 3.5.1
CMake generator: Unix Makefiles
CMake build tool: /usr/bin/make
Configuration: Release
C/C++:
Built as dynamic libs?: YES
C++ Compiler: /usr/bin/c++ (ver 5.4.0)
C++ flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG
C++ flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG
C Compiler: /usr/bin/cc
C flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG
C flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG
Linker flags (Release):
Linker flags (Debug):
ccache: NO
Precompiled headers: YES
Extra dependencies: /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/x86_64-linux-gnu/libtiff.so /usr/lib/x86_64-linux-gnu/libjasper.so /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so gtk-x11-2.0 gdk-x11-2.0 pangocairo-1.0 atk-1.0 cairo gdk_pixbuf-2.0 gio-2.0 pangoft2-1.0 pango-1.0 gobject-2.0 glib-2.0 fontconfig freetype gthread-2.0 gtkglext-x11-1.0 gdkglext-x11-1.0 GLU GL Xmu Xt SM ICE pangox-1.0 X11 gmodule-2.0 gstbase-1.0 gstreamer-1.0 gstvideo-1.0 gstapp-1.0 gstriff-1.0 gstpbutils-1.0 unicap dc1394 avcodec-ffmpeg avformat-ffmpeg avutil-ffmpeg swscale-ffmpeg gphoto2 gphoto2_port exif dl m pthread rt /usr/lib/x86_64-linux-gnu/libGLU.so /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/liblapack.so /usr/lib/libcblas.so /usr/lib/libatlas.so cudart nppc nppi npps cublas cufft -L/usr/local/cuda-8.0/lib64
3rdparty dependencies: libwebp zlib libjpeg tbb
OpenCV modules:
To be built: cudev core cudaarithm flann imgproc ml video cudabgsegm cudafilters cudaimgproc cudawarping imgcodecs photo shape videoio cudacodec highgui objdetect ts features2d calib3d cudafeatures2d cudalegacy cudaobjdetect cudaoptflow cudastereo stitching superres videostab python2
Disabled: world
Disabled by dependency: -
Unavailable: java python3 viz
GUI:
QT: NO
GTK+ 2.x: YES (ver 2.24.30)
GThread : YES (ver 2.48.2)
GtkGlExt: YES (ver 1.2.0)
OpenGL support: YES (/usr/lib/x86_64-linux-gnu/libGLU.so /usr/lib/x86_64-linux-gnu/libGL.so)
VTK support: NO
Media I/O:
ZLib: build (ver 1.2.8)
JPEG: libjpeg (ver 90)
WEBP: build (ver 0.3.1)
PNG: /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.2.54)
TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 4.0.6)
JPEG 2000: /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)
OpenEXR: /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2.2.0)
GDAL: NO
GDCM: NO
Video I/O:
DC1394 1.x: NO
DC1394 2.x: YES (ver 2.2.4)
FFMPEG: YES
avcodec: YES (ver 56.60.100)
avformat: YES (ver 56.40.101)
avutil: YES (ver 54.31.100)
swscale: YES (ver 3.1.101)
avresample: NO
GStreamer:
base: YES (ver 1.8.3)
video: YES (ver 1.8.3)
app: YES (ver 1.8.3)
riff: YES (ver 1.8.3)
pbutils: YES (ver 1.8.3)
OpenNI: NO
OpenNI PrimeSensor Modules: NO
OpenNI2: NO
PvAPI: NO
GigEVisionSDK: NO
Aravis SDK: NO
UniCap: NO
UniCap ucil: NO
V4L/V4L2: YES/YES
XIMEA: NO
Xine: NO
gPhoto2: YES
Parallel framework: TBB (ver 4.4 interface 9002)
Other third-party libraries:
Use IPP: 9.0.1 [9.0.1]
at: /mnt/sdb/ubuntu/install/opencv/build/3rdparty/ippicv/ippicv_lnx
Use IPP Async: NO
Use VA: NO
Use Intel VA-API/OpenCL: NO
Use Lapack: YES (/usr/lib/liblapack.so /usr/lib/libcblas.so /usr/lib/libatlas.so)
Use Eigen: NO
Use Cuda: YES (ver 8.0)
Use OpenCL: YES
Use OpenVX: NO
Use custom HAL: NO
NVIDIA CUDA
Use CUFFT: YES
Use CUBLAS: YES
USE NVCUVID: NO
NVIDIA GPU arch: 20 30 35 37 50 52 60 61
NVIDIA PTX archs:
Use fast math: NO
OpenCL: <Dynamic loading of OpenCL library>
Include path: /mnt/sdb/ubuntu/install/opencv/opencv-3.2.0/3rdparty/include/opencl/1.2
Use AMDFFT: NO
Use AMDBLAS: NO
Python 2:
Interpreter: /usr/bin/python2.7 (ver 2.7.12)
Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.12)
numpy: /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.13.1)
packages path: lib/python2.7/dist-packages
Python 3:
Interpreter: /usr/bin/python3 (ver 3.5.2)
Python (for build): /usr/bin/python2.7
Java:
ant: NO
JNI: NO
Java wrappers: NO
Java tests: NO
Matlab: Matlab not found or implicitly disabled
Documentation:
Doxygen: /usr/bin/doxygen (ver 1.8.11)
Tests and samples:
Tests: YES
Performance tests: YES
C/C++ Examples: NO
Install path: /usr/local
cvconfig.h is in: /mnt/sdb/ubuntu/install/opencv/build
-----------------------------------------------------------------
Configuring done
시작 부분 은 한 무더기 의 의존 도 를 검사 할 것 입 니 다.만약 에 부족 한 가방 이 있 으 면 바 이 두 가 어떻게 설치 하 는 지 자세히 보 세 요.왜냐하면 저 는 이미 다 설치 하면 힌트 를 주지 않 기 때 문 입 니 다.근 데 어떤 가방 들 은 저도 못 찾 으 면 해결 이 안 돼 요.위 에 있 는 것 처럼.
Checking for module 'libucil'
No package 'libucil' found
이것 을 나 는 정말 어떻게 해결 해 야 할 지 찾 지 못 했 지만,어쨌든 문 제 는 크 지 않다.그리고 다음 부분 은 몇 가지 부분 을 주의해 야 돼 요.꼭 있어 야 돼 요.
GUI:
GTK+ 2.x: YES (ver 2.24.30)
Video I/O:
V4L/V4L2: YES/YES
FFMPEG: YES
Python 2:
Interpreter: /usr/bin/python2.7 (ver 2.7.12)
Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.12)
numpy: /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.13.1)
packages path: lib/python2.7/dist-packages
주로 위의 몇 개 는 매우 중요 하 므 로,설치 해 야 한다.다시 하면 정상적으로 make
$ make -j8
$ make install
nccl 의 ld 환경 설정
$ vi /etc/ld.so.conf.d/nccl.conf
아래 디 렉 터 리 추가
/usr/local/nccl/lib/
그리고 집행
$ sudo ldconfig
설치 가 끝 난 후 python 으로 돌아 가 환경 이 잘 되 었 는 지 다시 한 번 확인 합 니 다.2.Python 테스트 프로그램 작성
# -*- coding:utf-8 -*-
#
import os
os.environ['GLOG_minloglevel'] = '2' # caffe log , import caffe
import caffe # caffe
from caffe.proto import caffe_pb2
from google.protobuf import text_format
import numpy as np
import cv2
import matplotlib.pyplot as plt
import time
import skimage.io
global num
num = 0
def detect(image1,net):
# image1 dtype uint8
# print image1.shape
# print image1.dtype
# print image1.size
# image = np.array(image1, dtype=np.float32)
# image = caffe.io.resize_image(image1, (480, 640))
image = skimage.img_as_float(image1).astype(np.float32)
# image = caffe.io.resize_image(image2, (300, 300))
# skimage.io.imsave("photo.png", image)
# cv2.imwrite("photo.png", image)
# image = caffe.io.load_image(caffe_root + 'examples/images/bird.jpg')
# imaged dtype float32
# image = caffe.io.load_image(caffe_root + 'photo.png')
# image = caffe.io.load_image(image1)
# dtype
# image.dtype = 'float32'
# print 'mode:'+image.mode
# print image.shape
# print image.dtype
# print image.size
# plt.imshow(image)
# * Run the net and examine the top_k results
# In[5]:
global num
num += 1
print 'image num:' + str(num)
transformed_image = transformer.preprocess('data', image)
net.blobs['data'].data[...] = transformed_image
time_start=time.time()
# Forward pass.
net.forward()
time_end=time.time()
print 'time:' + str(time_end-time_start) + ' s'
loc = net.blobs['bbox-list'].data[0]
print(loc)
# CAFFE , 1248 384
# net.blobs['bbox-list'].data , 1248*384
# , im.shape ,
for l in range(len(loc)):
xmin = int(loc[l][0] * image.shape[1] / 1248)
ymin = int(loc[l][1] * image.shape[0] / 384)
xmax = int(loc[l][2] * image.shape[1] /1248)
ymax = int(loc[l][3] * image.shape[0] / 384)
#
cv2.rectangle(image, (xmin, ymin), (xmax, ymax), (55 / 255.0, 255 / 255.0, 155 / 255.0), 2)
#
#plt.imshow(image, 'brg')
#plt.show()
cv2.imshow('img', image)
def show_info(cam):
print 'POS_FRAMES:'+str(cam.get(1))
print 'FRAME_COUNT:'+str(cam.get(7))
print 'FORMAT:'+str(cam.get(8))
print 'MODE:'+str(cam.get(9))
print 'SATURATION:'+str(cam.get(12))
print 'FPS:'+str(cam.get(5))
#CPU GPU
caffe.set_mode_gpu()
#caffe.set_mode_cpu()
#caffe.set_device(0)
caffe_root = '/var/smb/work/mycode/'
# ( )
caffemodel = caffe_root + 'module/detectnet/snapshot_iter_2391.caffemodel'
#
deploy = caffe_root + 'module/detectnet/deploy.prototxt'
img_root = caffe_root + 'data/'
#
net = caffe.Net(deploy, #
caffemodel, #
caffe.TEST) # ( dropout)
# ImageNet ( Caffe )
print(os.environ['PYTHONPATH'])
#mu = np.load(os.environ['PYTHONPATH'] + '/caffe/imagenet/ilsvrc_2012_mean.npy')
#mu = mu.mean(1).mean(1) # BGR
#
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
#transformer.set_mean('data', mu)
transformer.set_raw_scale('data', 255)
transformer.set_channel_swap('data', (2,1,0))
#
cam = cv2.VideoCapture(0)
if cam.isOpened():
cam.set(3, 400)
cam.set(4, 300)
cam.set(5, 3)
time.sleep(6)
cam.set(15, -8.0)
size = (int(cam.get(3)), int(cam.get(4)))
print 'size:'
print size
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
# cnt=2
# while cnt:
# cnt -= 1
while cam.isOpened():
ret, img = cam.read()
if ret:
#show_info(cam)
detect(img,net)
if 0xFF == ord('q') & cv2.waitKey(5) == 27:
break
# time.sleep(0.033)
cam.release()
cv2.destroyAllWindows()
인터페이스 에 bbox,즉 검 측 된 목표 가 이미지 에 있 는 좌표 가 인쇄 됩 니 다.또한 python 코드 에 있 는 관련 디 렉 터 리 를 스스로 수정 하 십시오.나 는 내 가 훈련 한 KITTI 데이터 세트 로 차량 을 조사 하 는 데 사용 되 었 다.왜냐하면 차 가 휴대 전 화 를 가지 고 속 이 는 것 을 찍 을 수 없 기 때문이다.
이상 의 python+opencv+caffe+카메라 가 목표 검 측 을 하 는 인 스 턴 스 코드 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.