下面我附上了一个测试程序来演示我在asyncio.gather抛出TypeError时遇到的问题。
我的目标: 进行多个并发异步调用,以从连接到我的计算机的一系列 USB 摄像机中将摄像机图像捕获到文件中。当所有相机都完成了它们的异步捕获后,我想然后继续处理。
此处显示的异步协程take_image()对“ffmpeg”应用程序进行系统调用,该应用程序将图像从指定的相机捕获到指定的文件。
import asyncio
import os
import subprocess
import time
async def take_image(camera_id, camera_name, image_file_path, image_counter):
image_capture_tic = time.perf_counter()
try:
run_cmd = subprocess.run( ["ffmpeg", '-y', '-hide_banner', '-f', 'avfoundation', '-i', camera_id,
'-frames:v', '1', '-f', 'image2', image_file_path], universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE) # Note, ffmpeg writes to stderr, not stdout!
except Exception as e:
print("Error: Unable to capture image for", image_file_path)
return "NO IMAGE!"
image_capture_toc = time.perf_counter()
print(f"{image_counter}: Captured {camera_name} image in: …Run Code Online (Sandbox Code Playgroud) 我的Android应用中有一个webview.从webview,我可以在手机上访问默认相机.以下代码工作正常.
webview.setWebChromeClient(new WebChromeClient(){
// Need to accept permissions to use the camera
@Override
public void onPermissionRequest(final PermissionRequest request) {
L.d("onPermissionRequest");
request.grant(request.getResources());
}
});
Run Code Online (Sandbox Code Playgroud)
我的问题是从这个webview访问外部USB摄像头.以上权限将打开webview中的默认摄像头.
我一直无法找到任何文件,甚至说这件事是可能的.是因为一些安全问题吗?
我在使用 OpenCV 和 python 访问 USB 摄像头时遇到问题。
我收到以下错误消息,我理解这意味着没有捕获帧?
error: OpenCV(3.4.1) C:\Miniconda3\conda-bld\opencv-suite_1533128839831\work\modules\highgui\src\window.cpp:356: error: (-215) size.width>0 && size.height>0 in function cv::imshow
Run Code Online (Sandbox Code Playgroud)
我的相机如下: https: //www.gophotonics.com/products/scientific-industrial-cameras/point-grey-research-inc/45-571-cm3-u3-50s5m-cs
简单代码如下。有什么想法吗?一些帮助我会感激
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud) 我使用带有 h264 编解码器输出的 ELP USB 摄像头。
ffmpeg-获取视频流的命令:
ffmpeg -i /dev/video1 -c:v copy output.ts
Run Code Online (Sandbox Code Playgroud)
结果我有一个 4Mb 比特率的视频 - 这个值对于我的任务来说太高了。
我使用GSTreamer时也出现同样的情况:
gst-launch-1.0 v4l2src device=/dev/video1 ! video/x-h264,width=1280,height=720,framerate=30/1 ! mpegtsmux ! filesink location=output.ts
Run Code Online (Sandbox Code Playgroud)
我知道如果我们首先解码 h264 流,然后再次将其编码为 h264,则可以更改比特率。此操作对我的 NanoPI 设备的 CPU 资源要求过高。
主要问题是: 是否可以在不解码的情况下更改 USB 相机的比特率?
提前致谢!
usb-camera ×4
ffmpeg ×2
python ×2
android ×1
gstreamer ×1
opencv ×1
python-3.8 ×1
raspberry-pi ×1
video ×1
webview ×1