前言

最近有某些需求需要用到电脑的摄像头。但是……我本本的自带摄像头的像素。1280x720,这……就有点尴尬
emmm,拍出来的照片,还真有点复古的感觉耶

enter description here

作为21世纪垃圾佬的我,怎么能屈服在这720P的分辨率下面呢?
怎么只能去某宝某东买,或者去某鱼“捡垃圾”吗?

enter description here

这价格……打扰了,打扰了~~~

怎么简单又低成本的搞定这个问题

但是我们不能屈服呀,目标还在那里,任务还没完成呢。
所以,我们应该怎么搞?

这个时候伟大的手机就可以站出来了。不管是现在的手机还是三四年前的手机,随意都能将分辨率提高到1080以上啦。更不说现在的P30了,银河都给你拍出来。但是……拍黑洞的同学可以省省了。。。

所以,这个是时候我们有三个方案:

  • 第一个:
    是自己做个轮子,然后把手机开到照相机,接着不停的用adb给屏幕截图,截好后就传回来。这样子的话,速度就会很慢。因为你需要不停的发指令,又要截图,截完还得传回电脑上面显示。所以,这个方案,能把帧率提高到10帧都难了咯。所以,我们就先放到一边,好吧。

  • 第二个:
    写一个软件做后台服务,按照一定分辨率去截图,然后启动一个web服务,把内容发送到电脑这边。但是这样子的话,时间成本比较高,对于我们为了这个临时或者偶尔需要用一下的情况来说,不是很现实。所以,也放到一边啦

  • 第三个:
    去网上找轮子,看一下有没有好点的现成的轮子或者软件。果不其然,I got it!发现一个似乎挺流批的软件,叫DroidCam ,这软件可以实现不同分辨率的图像传输,还可以实现放大缩小,相机聚焦的功能。号称可以兼容Chrome浏览器和QQ等通讯软件。太完美了,我们的需求他都实现了。

OK,鉴于时间成本和现实情况。我们暂且采用第三个方案吧,嘻嘻嘻。懒就是懒,无限借口~

试试白嫖DroidCam

安装PC端软件

我们先去这个软件的官网下载好这个软件的PC端,网址在这里:https://www.dev47apps.com/
然后下载好软件后,安装之。
随后安装完便打开,可以看到这样的界面:

enter description here

手机接入和电脑同一个局域网,然后,也安装上他们的这个软件,安卓版的,有两个版本,一个是正常版、另外一个是高级版的。亲测后,发现只有高级版的才有上面说的1080P的功能。然后,需要付费购买,但是不想付费怎么办?去某些神奇的地方下载破解版的DroidCamX。

链接:https://pan.baidu.com/s/1nMlOcHMjDnlprW4OnRLb0Q 提取码:mxo4

安装Android客户端

OK,我已经在手机上面装好DroidCamX,然后用手机打开软件。可以看到这样的界面。

enter description here

试试效果

这个时候,在电脑上面打开刚才装好的软件,接着再填好ip地址和端口,点击连接,接着你就可以看到东西了。
也可以在网页中打开,输入ip加端口。

enter description here

就这个分辨率,没得说了吧。吊锤自带的摄像头,放张比较图,意思意思一下

enter description here

左边1080手机摄像头,右边笔记本摄像头,点击可看大图

在网页上面的摄像头测试网站中也可以看到摄像头的正常使用。

enter description here

接着,我们差不多就已经可以确定使用这个软件的可行性了。

在代码中调用这个摄像头

可能会有同学问,怎么在代码中用到这个网络摄像头呢?

所以在这里我随意的、简单的用Python读取这个摄像头的数据。
效果大概长这样。

我们使用 python 导入 cv2库 ,然后,将我们刚才的摄像头的网页链接丢进去。比如:
http://192.168.1.104:4747/mjpegfeed?1920x1080 ,这个例子,后面 1920x1080 说明传回来的数据是要1920x1080分辨率的。然后用 cv2.VideoCapture 去读取这个链接。接着就可以在一个循环里面读取内容然后再imshow出来了。

enter description here

代码我放这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import time
import cv2
url_1080="http://192.168.1.104:4747/mjpegfeed?1920x1080"
url_720="http://192.168.1.104:4747/mjpegfeed?1280x720"

capture = cv2.VideoCapture(url_1080)
size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(capture.isOpened())
num = 0
cam=0
while True:
time.sleep(0.1)
ret, img = capture.read()
if cam:
#右旋90度,3次
img=np.rot90(img,3)
imgArr = model.detect(img,num)
print(imgArr)
for img in imgArr:
cv2.imshow('Video', img)
key = cv2.waitKey(1)
print("showing/{}.jpg".format(num))
num = num + 1
if key == ord('q'):
break
imgArr.clear()
capture.release()
cv2.destroyAllWindows()

从此可以用上手机摄像头给电脑来拍出更高清的视频或者相片了,使用场景就大家根据自己的情况来处理啦,总之,仁者见仁智者见智

要是感觉不错的话,就留个言评论一下下呀,欢迎各位大哥指正