当前位置: 首页 > news >正文

Python 调用手机摄像头

Python 调用手机摄像头

在手机上安装软件

这里以安卓手机作为演示,ISO也是差不多的
软件下载地址

注意:要想在电脑上查看手机摄像头拍摄的内容的在一个局域网里面(没有 WIFI 可以使用 热点 )

安装完打开IP摄像头服务器

在这里插入图片描述

点击分享查看IP

在这里插入图片描述

查看局域网的IP

在这里插入图片描述

用Python的Opencv写一个代码来连接手机摄像头

安装opencv-python

pip install opencv-python

注意

  • 可能安装库太慢可以这样(这里使用的是清华的镜像)
    pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
  • 保存的照片在当前的py文件同级目录下面的img里面
  • 手机横着,电脑显示的也是横着,反之
    # 将图像旋转90度以竖直显示
    img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)   # 5. 旋转图像
    

使用

  • ESC: 退出界面
  • 空格: 保存手机摄像头的照片

代码

import cv2
import os# 创建窗口,设置为不能改变大小
cv2.namedWindow('camera', cv2.WINDOW_NORMAL)   # 1. 修改窗口属性,允许改变大小# 摄像头设置,这里使用的是网络摄像头的URL
video = 'http://admin:admin@192.168.1.103:8081'
capture = cv2.VideoCapture(video)   # 2. 初始化摄像头# 初始化保存图片的序号
p = 1# 开始无限循环,直到用户中断
while True:success, img = capture.read()   # 3. 从摄像头读取一帧图像if not success:print("无法抓取帧")   # 4. 如果读取失败,打印错误信息并退出循环break# 将图像旋转90度以竖直显示img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)   # 5. 旋转图像# 显示图像cv2.imshow("camera", img)   # 6. 在窗口中显示图像# 按键处理key = cv2.waitKey(10)   # 7. 等待用户按键,10毫秒响应一次if key == 27:   # 8. 如果按下ESC键(ASCII码为27),退出循环breakelif key == ord(' '):   # 9. 如果按下空格键(ASCII码为32),保存图片# 保存图片到当前目录下的img文件夹中img_folder = 'img'if not os.path.exists(img_folder):os.makedirs(img_folder)   # 10. 如果不存在img文件夹,则创建img_filename = f"{img_folder}/image_{p}.jpg"   # 11. 生成图片文件名cv2.imwrite(img_filename, img)   # 12. 保存图片print(f"Saved image {p}.jpg")p += 1   # 13. 更新图片序号# 释放摄像头资源
capture.release()
# 关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()

注意

video的地址替换为查看局域网的IP时看到的地址
在这里插入图片描述

展示效果

电脑端

在这里插入图片描述

手机拍摄

在这里插入图片描述

分辨率低,也就是图片还是有点模糊

解释

导入必要的库
import cv2
import os

首先,导入cv2模块(OpenCV库)用于图像处理和视频流操作,以及os模块用于文件路径操作。

创建窗口
cv2.namedWindow('camera', cv2.WINDOW_NORMAL)

创建一个名为camera的窗口,并设置为可以改变大小。

摄像头设置
video = 'http://admin:admin@192.168.1.103:8081'
capture = cv2.VideoCapture(video)

设置网络摄像头的URL,并初始化摄像头对象。

初始化保存图片的序号
p = 1

初始化一个变量p用于保存图片时的序号。

主循环
while True:

开始一个无限循环,用于持续捕获和处理视频帧。

读取视频帧
success, img = capture.read()

从摄像头捕获一帧图像。success是一个布尔值,表示是否成功捕获帧,img是捕获到的图像。

图像旋转
if not success:print("无法抓取帧")breakimg = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)

如果未能成功捕获帧,则打印错误信息并退出循环。成功捕获后,将图像旋转90度以竖直方向显示。

显示图像
cv2.imshow("camera", img)

将旋转后的图像显示在之前创建的camera窗口中。

按键处理
key = cv2.waitKey(10)

等待用户按键操作,如果在10毫秒内有按键则响应。

if key == 27:break
elif key == ord(' '):

如果用户按下ESC键(ASCII码为27),则退出循环。如果按下空格键(ASCII码为32),则保存当前帧为图片。

保存图片
img_folder = 'img'
if not os.path.exists(img_folder):os.makedirs(img_folder)img_filename = f"{img_folder}/image_{p}.jpg"
cv2.imwrite(img_filename, img)
print(f"Saved image {p}.jpg")
p += 1

检查是否存在名为img的文件夹,如果不存在则创建。生成图片文件名,并将当前帧保存为图片。打印保存图片的信息,并更新图片序号。

释放资源
capture.release()
cv2.destroyAllWindows()

循环结束后,释放摄像头资源,并关闭所有OpenCV创建的窗口。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Flask 第二课 -- 安装
  • 常见文档工具对比和选择
  • 解锁SQL基础应用新境界:从入门到精通的扩展实践指南(SQL扩展)
  • 1765asp.net古镇旅游网站VS开发sqlserver数据库web结构c#编程web网页设计
  • 华为OD机试真题 - 抢7游戏(Python/JS/C/C++ 2024 D卷 100分)
  • 小琳AI课堂:Nezha模型:基于Transformer的中文预训练语言模型优化与进展
  • ​数据链路层——流量控制可靠传输机制 ​
  • 高职人工智能训练师边缘计算实训室解决方案
  • 【Unity3D】如何用MMD4Mecanim插件将pmx格式模型转换为fbx格式模型
  • jEasyUI 创建带复选框的树形菜单
  • 《高校教育管理》
  • 兔英语语法体系——观后笔记
  • goby/xray批量导入自定义poc(附2024红队POC)
  • 线程实现的几种方式
  • Android SystemUI组件(06)导航栏创建分析虚拟按键
  • @jsonView过滤属性
  • AHK 中 = 和 == 等比较运算符的用法
  • CSS实用技巧
  • django开发-定时任务的使用
  • js中forEach回调同异步问题
  • Netty源码解析1-Buffer
  • Redash本地开发环境搭建
  • Solarized Scheme
  • vue2.0项目引入element-ui
  • Web标准制定过程
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 简析gRPC client 连接管理
  • 蓝海存储开关机注意事项总结
  • 试着探索高并发下的系统架构面貌
  • 首页查询功能的一次实现过程
  • 温故知新之javascript面向对象
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • mysql面试题分组并合并列
  • ​iOS实时查看App运行日志
  • #define
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #pragma multi_compile #pragma shader_feature
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (02)Unity使用在线AI大模型(调用Python)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (6)设计一个TimeMap
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分布式缓存)Redis哨兵
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十三)MipMap
  • (转)创业的注意事项
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • **python多态
  • .gitignore文件_Git:.gitignore