Buat sumber kamera baru menggunakan OpenCV Python (Driver Kamera Menggunakan Python)
Adakah yang tahu cara membuat sumber kamera menggunakan python? Jadi misalnya saya punya 2 kamera:
- Kamera web
- Kamera USB
Setiap kali saya menggunakan aplikasi web atau antarmuka yang memerlukan kamera, saya memiliki opsi untuk memilih sumber kamera dari dua yang disebutkan di atas.
Apa yang ingin saya capai adalah saya memproses kerangka waktu nyata dalam program python saya dengan portal kamera saya sendiri seperti ini:
import numpy as np
import cv2
while True:
_,frame = self.cam.read()
k = cv2.waitKey(1)
if k & 0xFF == ord('q'):
self.cam.release()
cv2.destroyAllWindows()
break
else:
cv2.imshow("Frame",frame)
Sekarang saya ingin menggunakan ini framesebagai sumber kamera jadi lain kali setiap kali saya membuka perangkat lunak atau aplikasi web yang membutuhkan kamera maka itu menunjukkan opsi sebagai berikut:
- Kamera web
- Kamera USB
- Python Cam (Atau apapun namanya)
Adakah yang punya saran atau petunjuk tentang cara melakukannya? Saya telah melihat beberapa perangkat lunak premium yang menghasilkan sumber kamera mereka sendiri tetapi ditulis dalam c ++. Saya bertanya-tanya apakah ini bisa terjadi dengan python atau tidak.
Berikut adalah contoh yang sama:
Seperti yang Anda lihat, ada beberapa sumber kamera di sana. Saya ingin menambahkan satu sumber kamera yang menampilkan bingkai yang diproses oleh python di umpannya.
Jawaban
Anda dapat menggunakan v4l2loopback (https://github.com/umlaeute/v4l2loopback) untuk itu. Itu ditulis dalam C tetapi ada beberapa pembungkus python. Saya telah menggunakan virtualvideo (https://github.com/Flashs/virtualvideo).
Virtualvideo README cukup mudah tetapi berikut adalah modifikasi saya dari contoh github mereka agar sesuai dengan tujuan Anda:
import virtualvideo
import cv2
class MyVideoSource(virtualvideo.VideoSource):
def __init__(self):
self.cam = cv2.VideoCapture(0)
_, img = self.cam.read()
size = img.shape
#opencv's shape is y,x,channels
self._size = (size[1],size[0])
def img_size(self):
return self._size
def fps(self):
return 30
def generator(self):
while True:
_, img = self.cam.read()
yield img
vidsrc = MyVideoSource()
fvd = virtualvideo.FakeVideoDevice()
fvd.init_input(vidsrc)
fvd.init_output(2, 640, 480, pix_fmt='yuyv422')
fvd.run()
di init_output , argumen pertama adalah sumber daya kamera virtual yang saya buat saat menambahkan modul kernel:
sudo modprobe v4l2loopback video_nr=2 exclusive_caps=1
argumen terakhir adalah ukuran webcam saya dan format piksel.
Anda akan melihat opsi ini di hangouts:
Pertama, Anda perlu mendapatkan daftar kamera yang tersedia, kode untuk itu dapat ditemukan di sini
Kemudian setelah kamera dipilih, gunakan camera = cv2.VideoCapture(chosen_port)