① 用python编程做了个摄像头拍照程序,为何拍出来的照片分辨率不可调
OpenCV读的是视频流,所以摄像机视频流的像素上限要弄清楚,跟单纯拍照不一样,一个800万像素的相机视频流应该只有1080,再往上调像素没有意义了已经。
② 红外线摄像头工作原理
工作原理
红外灯发出红外线照射物体,红外线漫反射,被监控摄像头接收,形成视频图像。就好比黑夜里用手电筒照亮一样,手电筒相当于红外灯,摄像头相当于人眼球,道理是一致的。
红外摄像头感光就是红外线,在某个波段范围内,比如800nm-1100nm。如果从光谱来讲,和普通摄像头感可见光原理类似。红外摄像头工作原理是红外灯发出红外线照射物体,红外线漫反射,被监控摄像头接收,形成视频图像。
(2)红外摄像头python扩展阅读:
红外线系统的组成
红外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。红外线系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。
红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。
③ PYTHON调用海康威视的摄像头,实时显示监控内容卡的很
咨询记录 · 回答于2021-10-09
④ 如何优雅的用Python玩转语音聊天机器人
所需硬件:
树莓派B+
人体红外线感应模块
内置麦克风摄像头(实测树莓派免驱淘宝链接)
申请API:
网络语音api
图灵api
语音聊天机器人实现原理:当有人来到跟前时--》触发聊天功能,开始以每2s检测录制语音--》通过网络语音api合成文字--》传递给图灵api返回回答信息--》通过网络语音合成播放
【人体感应识别部分Python代码renti.py】
#/usr/bin/python#coding:utf-8import RPi.GPIO as GPIOimport timeimport osimport signalimport atexitGPIO.setmode(GPIO.BCM) GPIO_PIR = 14 GPIO.setup(GPIO_PIR,GPIO.IN) # Echojing = 0dong = 0 sum = 0sum1 = 0oldren = 0sleep = 0def ganying(): i = 0 ok = 0 error = 0 while i < 10: if GPIO.input(GPIO_PIR) == 1 : ok = ok + 1 if GPIO.input(GPIO_PIR) == 0 : error = error + 1 time.sleep(0.01) i = i + 1 ren = ok/(error+1) return ren
1
GPIO_PIR = 14
为 红外线检测模块与树莓派的针脚,脚本函数返回0表示无人,>0 为有人
【Python语音识别聊天部分robot.py】
#/usr/bin/python# -*- coding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding( "utf-8" )import urllibimport urllib2import jsonimport uuidimport base64import osimport timefrom renti import * #获取网络tokenappid=7647466apikey="网络API"secretkey="网络API" _url="h.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apikey + "&client_secret=" + secretkey; y_post=urllib2.urlopen(_url)y_read=y_post.read()y_token=json.loads(y_read)['access_token']#print y_read#print y_token #------------------function------------- def luyin(): os.system('arecord -D plughw:1,0 -c 1 -d 2 1.wav -r 8000 -f S16_LE 2>/dev/null') def fanyi():
#---------------语音识别部分 mac_address="haogeoyes" with open("1.wav",'rb') as f: s_file = f.read() speech_base64=base64.b64encode(s_file).decode('utf-8') speech_length=len(s_file) data_dict = {'format':'wav', 'rate':8000, 'channel':1, 'cuid':mac_address, 'token':y_token, 'lan':'zh', 'speech':speech_base64, 'len':speech_length} json_data = json.mps(data_dict).encode('utf-8') json_length = len(json_data) asr_server = 'm/server_api' request = urllib2.Request(url=asr_server) request.add_header("Content-Type", "application/json") request.add_header("Content-Length", json_length) fs = urllib2.urlopen(url=request, data=json_data) result_str = fs.read().decode('utf-8') json_resp = json.loads(result_str) if json_resp.has_key('result'): out_txt=json_resp['result'][0] else: out_txt="Null" return out_txt def tuling(b): f=urllib.urlopen("23.com/openapi/api?key="此处为图灵API"&info=%s" % b) f=json.loads(f.read())['text'] return f def hecheng(text,y_token): #text="你好我是机器人牛牛很高兴能够认识你" geturl="u.com/text2audio?tex="+text+"&lan=zh&per=1&pit=9&spd=6&cuid=CCyo6UGf16ggKZGwGpQYL9Gx&ctp=1&tok="+y_token return os.system('omxplayer "%s" > /dev/null 2>&1 '%(geturl)) #return os.system('omxplayer "%s" > /dev/null 2>&1 '%(geturl)) def nowtime(): return time.strftime('%Y-%m-%d %H:%M:%S ') #---------------main-----------------num=0 #num用来判断是第一次说话,还是在对话过程中first=1 #判断是不是第一说话 当1000次没有人动认为是第一次while True: if ganying()!=0: run=open('run.log','a') if first==0: hecheng("你好,我是牛牛机器人,你可以和我聊天,不过说话的时候你必须靠近话筒近一点,",y_token) hecheng("说点什么吧,2秒钟内说完哦.",y_token) first=1 #为1一段时间就不执行 num=0 #从新计数 #print ganying() run.write(nowtime()+"说点神马吧..........."+'\n') print nowtime()+"说点神马吧.........." luyin() #开始录音 out=fanyi().encode("utf-8") #翻译文字 run.write(nowtime()+"我说:"+out+'\n') print nowtime()+"我说:"+out if out == "Null": text="没有听清楚你说什么" os.system('omxplayer "shenme.wav" > /dev/null 2>&1 ') else: text=tuling(out) hecheng(text,y_token) print nowtime()+"牛牛:"+text run.write(nowtime()+"牛牛:"+text+'\n') run.close() else: #print ganying() #调试查看是否为0有人没人 #print num num=num+1 #num长时间增大说明没有人在旁边 if num > 1000: first=0 #0表示第一次说话
万事俱备 运行nohup python robot.py 哈哈就可以脱离屏幕开始愉快的语音聊天啦
下面看看聊天的日志记录吧
后续更新。。。。。。Python如何用语音优雅的控制小车
⑤ python如何能采集多个摄像头的数据
可以,用PYQT+CV2,四个USB连接成功,程序如下,UI要自己搞了,放不下
# -*- coding: utf-8 -*-
import sys#, time
from PyQt5 import QtWidgets
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from Ui_cv2ui_thread import Ui_MainWindow
import cv2 as cv
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import (QApplication, QDialog, QFileDialog, QGridLayout,
QLabel, QPushButton, QColorDialog)
import numpy as np
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.setupUi(self) #这个一定要在这个最前面位置
# define the slot for pushbutton to save the merged image
self.pushButton.clicked.connect(self.savemergeimage)
self.img = np.ndarray(()) #空的numpy array
self.img1 = np.ndarray(())
self.img2= np.ndarray(())
self.img3= np.ndarray(())
self.img4= np.ndarray(())
self.img4= np.empty([960,1280, 3], int)
self.cap = cv.VideoCapture(3) #注意,由大开到小,很重要
self.cap.set(3, 640) # setup the resolution of CCD
self.cap.set(4, 480)
ret, self.img=self.cap.read()
self.cap1 = cv.VideoCapture(2)
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1=self.cap1.read()
self.cap2 = cv.VideoCapture(1)
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2=self.cap2.read()
self.cap3 = cv.VideoCapture(0)
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3=self.cap3.read()
#time.sleep(1)也许需要延迟,等他准备好
# 初始化一个定时器,在其他条件下用的
#self.timer = QTimer(self)
# 实例化一个线程
self.work0= WorkThread()
self.work0.trigger.connect(self.ccd2)
# 定义时间任务是一次性任务就设定下一行
#self.timer.setSingleShot(True)
# 启动时间任务,注意一致性
self.work0.start()
# 实例化一个线程
self.work= WorkThread()
# 多线程的信号触发连接到ccd3
self.work.trigger.connect(self.ccd3)
self.work.start()
# 实例化一个线程
self.work2 = WorkThread()
# 多线程的信号触发连接到ccd4
self.work2.trigger.connect(self.ccd4)
self.work2.start()
# 实例化一个线程
self.work3 = WorkThread()
# 多线程的信号触发连接到ccd1
self.work3.trigger.connect(self.ccdmerge)
self.work3.start()
self.work4 = WorkThread()
# 多线程的信号触发连接到ccd1
self.work4.trigger.connect(self.ccd1)
self.work4.start()
def refreshShowa(self):#显示ccd1到label1
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img.shape
bytesPerLine = 3 * width
self.qImg = QImage(self.img.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label.setPixmap(QPixmap.fromImage(self.qImg))
def refreshShowb(self):#显示ccd2到label2
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img1.shape
bytesPerLine = 3 * width
self.qImg1 = QImage(self.img1.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_2.setPixmap(QPixmap.fromImage( self.qImg1))
def refreshShowc(self):#显示ccd3到label3
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img2.shape
bytesPerLine = 3 * width
self.qImg2 = QImage(self.img2.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_3.setPixmap(QPixmap.fromImage( self.qImg2))
def refreshShowd(self):#显示ccd4到label4
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img3.shape
bytesPerLine = 3 * width
self.qImg3 = QImage(self.img3.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_4.setPixmap(QPixmap.fromImage( self.qImg3))
def refreshShowe(self):#显示合并的影像到label6
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img4.shape
bytesPerLine = 3 * width
self.qImg4 = QImage(self.img4.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_6.setPixmap(QPixmap.fromImage( self.qImg4))
def ccd1(self):
self.cap.set(3, 640)
self.cap.set(4, 480)
ret, self.img = self.cap.read()
self.refreshShowa()
# 启动另一个线程
self.work0.start()#注意一致性
def ccd2(self, str):
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1 = self.cap1.read()
self.refreshShowb()
self.work.start()#注意一致性
def ccd3(self, str):
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2= self.cap2.read()
self.refreshShowc()
self.work2.start()#注意一致性
def ccd4(self, str):
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3 = self.cap3.read()
self.refreshShowd()
self.work3.start()#注意一致性
def ccdmerge(self, str):
self.img4=np.hstack((self.img, self.img1))
self.img4=np.vstack((self.img4, np.hstack((self.img2, self.img3))))
#print ('here is a merge process') 可以用来判断多线程的执行
self.refreshShowe() #later to remove the remark
self.work4.start()#注意一致性
def savemergeimage(self):
# 调用存储文件dialog
fileName, tmp = QFileDialog.getSaveFileName(
self, 'Save Image', './__data', '*.png *.jpg *.bmp', '*.png')
if fileName == '':
return
if self.img.size == 1:
return
# 调用opencv写入图像
cv.imwrite(fileName,self.img4)
class WorkThread(QThread): #多线程核心,非常重要
# 定义一个信号
trigger = pyqtSignal(str)
def __int__(self):
# 初始化函数,默认
super(WorkThread, self).__init__()
def run(self):
self.trigger.emit('')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
⑥ python有什么操作摄像头的模块么
VideoCapture 模块,可以操作捕捉摄像头进行截图,官网http://videocapture.sourceforge.net/
⑦ 如何使用PYTHON操作摄像头
建议在知乎上问,知乎上大神比较多。
(我学了两年python了 也不知道python可以操作摄像头这么厉害。。。)
⑧ 如何使用Python操作摄像头
用过USB摄像头的都知道,你需要使用鼠标来操作它,比如截个图,录个像什么的,要点N次鼠标,对于我们那些不喜欢多次点击鼠标的人来说,这是一件很boring的事情!
⑨ 怎么在android下用python调用摄像头
1、下载相关软件包 下载地址:(code/p/android-scripting/downloads/list),我们需要下载如下几个文件: 并将这5个文件复制到 Android SDK目录下,(我这里复制到 /opt/android-sdk-linux/platform-tools , adb工具现在被放在platform-tools下,而不是原来的tools目录) 2、安装 .apk 程序 注意:在安装前,请你保持Android 虚拟器的运行状态。 到终端下,进入 platform-tools 目录运行命令: sudo ./adb install sl4a_r3.apk 安装不需要太多时间,很快完成,如果你看到“Success”,则表示你安装成功,否则请尝试重新安装。安同样方法,安装python_for_android_r1.apk。 3、安装Python 回到虚拟器,点击 图标,进入程序菜单界面。 4、import Android,即可调用各个类。