最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python開啟攝像頭以及深度學習實現(xiàn)目標檢測方法

 更新時間:2018年08月03日 09:15:05   作者:紅色未來  
今天小編就為大家分享一篇python開啟攝像頭以及深度學習實現(xiàn)目標檢測方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

最近想做實時目標檢測,需要用到python開啟攝像頭,我手上只有兩個uvc免驅的攝像頭,性能一般。利用python開啟攝像頭費了一番功夫,主要原因是我的攝像頭都不能用cv2的VideCapture打開,這讓我聯(lián)想到原來opencv也打不開Android手機上的攝像頭(后來采用QML的Camera模塊實現(xiàn)的)。看來opencv對于攝像頭的兼容性仍然不是很完善。

我嘗了幾種辦法:v4l2,v4l2_capture以及simpleCV,都打不開。最后采用pygame實現(xiàn)了攝像頭的采集功能,這里直接給大家分享具體實現(xiàn)代碼(python3.6,cv2,opencv3.3,ubuntu16.04)。中間注釋的部分是我上述方法打開攝像頭的嘗試,說不定有適合自己的。

import pygame.camera
import time
import pygame
import cv2
import numpy as np
 
def surface_to_string(surface):
 """convert pygame surface into string"""
 return pygame.image.tostring(surface, 'RGB')
 
def pygame_to_cvimage(surface):
 """conver pygame surface into cvimage"""
 
 #cv_image = np.zeros(surface.get_size, np.uint8, 3)
 image_string = surface_to_string(surface)
 image_np = np.fromstring(image_string, np.uint8).reshape(480, 640, 3)
 frame = cv2.cvtColor(image_np, cv2.COLOR_BGR2RGB)
 return image_np, frame
 
 
pygame.camera.init()
pygame.camera.list_cameras()
cam = pygame.camera.Camera("/dev/video0", [640, 480])
 
cam.start()
time.sleep(0.1)
screen = pygame.display.set_mode([640, 480])
 
while True:
 image = cam.get_image()
 
 cv_image, frame = pygame_to_cvimage(image)
 
 screen.fill([0, 0, 0])
 screen.blit(image, (0, 0))
 pygame.display.update()
 cv2.imshow('frame', frame)
 key = cv2.waitKey(1)
 if key & 0xFF == ord('q'):
  break
 
 
 #pygame.image.save(image, "pygame1.jpg")
 
cam.stop()
 
 
 

上述代碼需要注意一個地方,就是pygame圖片和opencv圖片的轉化(pygame_to_cvimage)有些地方采用cv.CreateImageHeader和SetData來實現(xiàn),注意這兩個函數(shù)在opencv3+后就消失了。因此采用numpy進行實現(xiàn)。

至于目標檢測,由于現(xiàn)在網上有很多實現(xiàn)的方法,MobileNet等等。這里我不講解具體原理,因為我的研究方向不是這個,這里直接把代碼貼出來,親測成功了。

from imutils.video import FPS
import argparse
import imutils
 
 
import v4l2
import fcntl
 
import v4l2capture
import select
import image
 
import pygame.camera
import pygame
import cv2
import numpy as np
import time
 
def surface_to_string(surface):
 """convert pygame surface into string"""
 return pygame.image.tostring(surface, 'RGB')
 
def pygame_to_cvimage(surface):
 """conver pygame surface into cvimage"""
 
 #cv_image = np.zeros(surface.get_size, np.uint8, 3)
 image_string = surface_to_string(surface)
 image_np = np.fromstring(image_string, np.uint8).reshape(480, 640, 3)
 frame = cv2.cvtColor(image_np, cv2.COLOR_BGR2RGB)
 return frame
 
 
ap = argparse.ArgumentParser()
ap.add_argument("-p", "--prototxt", required=True, help="path to caffe deploy prototxt file")
ap.add_argument("-m", "--model", required=True, help="path to caffe pretrained model")
ap.add_argument("-c", "--confidence", type=float, default=0.2, help="minimum probability to filter weak detection")
args = vars(ap.parse_args())
 
CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow",
   "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))
 
print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
 
 
print("[INFO] starting video stream ...")
 
###### opencv ########
#vs = VideoStream(src=1).start()
#
#camera = cv2.VideoCapture(0)
#if not camera.isOpened():
# print("camera is not open")
#time.sleep(2.0)
 
 
###### v4l2 ########
 
#vd = open('/dev/video0', 'r')
#cp = v4l2.v4l2_capability()
#fcntl.ioctl(vd, v4l2.VIDIOC_QUERYCAP, cp)
 
#cp.driver
 
 
##### v4l2_capture
#video = v4l2capture.Video_device("/dev/video0")
#size_x, size_y = video.set_format(640, 480, fourcc= 'MJPEG')
#video.create_buffers(30)
 
#video.queue_all_buffers()
 
#video.start()
 
##### pygame ####
pygame.camera.init()
pygame.camera.list_cameras()
cam = pygame.camera.Camera("/dev/video0", [640, 480])
 
cam.start()
time.sleep(1)
 
fps = FPS().start()
 
 
while True:
 #try:
 # frame = vs.read()
 #except:
 # print("camera is not opened")
 
 #frame = imutils.resize(frame, width=400)
 #(h, w) = frame.shape[:2]
 
 
 #grabbed, frame = camera.read()
 #if not grabbed:
 # break
 #select.select((video,), (), ())
 #frame = video.read_and_queue()
 
 #npfs = np.frombuffer(frame, dtype=np.uint8)
 #print(len(npfs))
 #frame = cv2.imdecode(npfs, cv2.IMREAD_COLOR)
 
 image = cam.get_image()
 frame = pygame_to_cvimage(image)
 
 frame = imutils.resize(frame, width=640)
 blob = cv2.dnn.blobFromImage(frame, 0.00783, (640, 480), 127.5)
 
 net.setInput(blob)
 detections = net.forward()
 
 for i in np.arange(0, detections.shape[2]):
 
  confidence = detections[0, 0, i, 2]
 
  if confidence > args["confidence"]:
 
   idx = int(detections[0, 0, i, 1])
   box = detections[0, 0, i, 3:7]*np.array([640, 480, 640, 480])
   (startX, startY, endX, endY) = box.astype("int")
 
   label = "{}:{:.2f}%".format(CLASSES[idx], confidence*100)
   cv2.rectangle(frame, (startX, startY), (endX, endY), COLORS[idx], 2)
   y = startY - 15 if startY - 15 > 15 else startY + 15
 
   cv2.putText(frame, label, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)
 
 cv2.imshow("Frame", frame)
 key = cv2.waitKey(1)& 0xFF
 
 if key ==ord("q"):
  break
 
 
fps.stop()
print("[INFO] elapsed time :{:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS :{:.2f}".format(fps.fps()))
 
 
 
cv2.destroyAllWindows()
 
#vs.stop()
 

上面的實現(xiàn)需要用到兩個文件,是caffe實現(xiàn)好的模型,我直接上傳(文件名為MobileNetSSD_deploy.caffemodel和MobileNetSSD_deploy.prototxt,上google能夠下載到)。

以上這篇python開啟攝像頭以及深度學習實現(xiàn)目標檢測方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python?ttkbootstrap的介紹與使用教程

    Python?ttkbootstrap的介紹與使用教程

    這篇文章主要介紹了Python?ttkbootstrap的介紹與使用,本文僅僅簡單介紹了ttkbootstrap的使用,而ttkbootstrap可以使我們創(chuàng)建一個簡單用戶圖形界面,并對其可以做一些操作,需要的朋友可以參考下
    2023-03-03
  • python把數(shù)組中的數(shù)字每行打印3個并保存在文檔中的方法

    python把數(shù)組中的數(shù)字每行打印3個并保存在文檔中的方法

    今天小編就為大家分享一篇python把數(shù)組中的數(shù)字每行打印3個并保存在文檔中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python?分支結構詳解

    Python?分支結構詳解

    這篇文章主要介紹了Python?分支結構,分支結構包括單分支結構、雙分支結構、多分支結構等內容,下文ui分支結構進行詳細分析,需要的小伙伴可以參考一下
    2022-02-02
  • python中import,from……import的使用詳解

    python中import,from……import的使用詳解

    這篇文章主要介紹了python中import,from……import的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python模擬登陸,用session維持回話的實例

    python模擬登陸,用session維持回話的實例

    今天小編就為大家分享一篇python模擬登陸,用session維持回話的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 教你利用Selenium+python自動化來解決pip使用異常

    教你利用Selenium+python自動化來解決pip使用異常

    今天帶大家來學習怎么利用Selenium+python自動化解決pip使用異常,文中介紹的非常詳細,對正在學習python的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-05-05
  • 淺析Python中的getattr(),setattr(),delattr(),hasattr()

    淺析Python中的getattr(),setattr(),delattr(),hasattr()

    這篇文章主要介紹了Python中的getattr(),setattr(),delattr(),hasattr() 的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 教你使用Python畫圣誕樹做浪漫的程序員

    教你使用Python畫圣誕樹做浪漫的程序員

    這不是圣誕節(jié)快到了,還不用Python繪制個圣誕樹和煙花讓女朋友開心開心,也算是親手做的,稍稍花了點心思,學會了趕緊畫給你的那個她吧
    2022-12-12
  • PyQT實現(xiàn)多窗口切換

    PyQT實現(xiàn)多窗口切換

    這篇文章主要為大家詳細介紹了PyQT實現(xiàn)多窗口切換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python基礎篇之pandas常用基本函數(shù)匯總

    python基礎篇之pandas常用基本函數(shù)匯總

    Pandas是一個python數(shù)據(jù)分析庫,它提供了許多函數(shù)和方法來加快數(shù)據(jù)分析過程,下面這篇文章主要給大家介紹了關于python基礎篇之pandas常用基本函數(shù)的相關資料,需要的朋友可以參考下
    2022-07-07

最新評論

西吉县| 紫云| 江源县| 溆浦县| 邹平县| 九龙坡区| 剑阁县| 沿河| 千阳县| 洪湖市| 休宁县| 淮滨县| 新沂市| 翼城县| 镇远县| 安多县| 罗江县| 太原市| 山阴县| 延寿县| 光山县| 都兰县| 东乡县| 静安区| 和顺县| 板桥市| 宣化县| 赤壁市| 边坝县| 邵武市| 彰化市| 丰原市| 青冈县| 云浮市| 英山县| 兴和县| 德江县| 安岳县| 龙里县| 且末县| 临颍县|