废弃手机秒变摄像头,我用Python偷看男朋友都在干啥👀

前几天拿着父母的旧手机去卖钱,结果人家说:"手机太老,最多5块"!花姐不废话灰溜溜的拿着回家了。

但最近我灵机一动,给它找了个新用途:秒变IP摄像头!而且,我还用Python写了个小脚本,随时随地用电脑偷偷看看"男朋友"都在干啥!(注意,正经用法也适用于监控猫主子和花盆里的绿植~)

接下来,就跟我一起解锁这个新技能,顺便让你的废旧手机"死灰复燃",实现它摄像头的最后价值!📱✨


准备工作:一杯奶茶+废手机

要开始这个有趣的小项目,你只需要以下装备:

  1. 一台废弃手机(还能用摄像头的就行,别拿屏幕碎成蜘蛛网那种😂)。
  2. Python的1个工具:OpenCV
bash 复制代码
pip install opencv-python
  1. 一颗对技术充满好奇的心!(当然,还有男朋友的蛛丝马迹🕵️‍♀️)

还有,如果你男朋友问你为什么对代码突然感兴趣,请保持微笑,不要慌。


第一步:手机变摄像头,操作超简单

旧手机变摄像头,其实只需要一个神奇的APP:IP Webcam。它不仅能让手机秒变"监控神器",还能随时随地输出实时视频流。来,跟我一起操作:

  1. 下载IP Webcam

    打开应用商店,搜"IP Webcam",下载安装,别偷懒。国内主流应用商店可能不提供下载地址,可以自行上网搜索,是可以找到下载地址的。

  2. 启动视频服务

    打开APP,直接点"Start Server/开启服务器",然后你会看到一个神秘的地址,比如:http://192.168.0.101:8080。这个地址就是手机摄像头的视频入口,记下来!💡

  3. 测试摄像头

    在电脑的浏览器上输入刚才的地址,能看到实时画面就说明一切正常啦!

至此,你的旧手机已经完美进化成一台摄像头。接下来,我们用Python"偷偷连线"它!🤓


第二步:写个Python脚本,偷偷看看"现场直播"

说是"偷偷",但其实是正经的技术实现!现在我们用Python写段小代码,把手机摄像头的画面抓到电脑上。

来,直接上代码👇:

python 复制代码
import cv2

# 你的 IP Webcam 的 URL
ip_camera_url = 'http://192.168.0.100:8080/video'

# 创建一个视频捕捉对象,连接到 IP Webcam 视频流
cap = cv2.VideoCapture(ip_camera_url)

if not cap.isOpened():
    print("无法连接到 IP Webcam!")
    exit()

# 设置窗口名称
window_name = "what's U BF doing"

# 创建窗口,并设置大小(例如设置为 640x480)
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
cv2.resizeWindow(window_name, 640, 480)

while True:
    # 读取一帧视频
    ret, frame = cap.read()

    if not ret:
        print("读取视频帧失败!")
        break

    # 显示视频帧
    cv2.imshow(window_name, frame)

    # 按 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

第三步:关键步骤拆解,轻松看懂

1. 导入必要的库

python 复制代码
import cv2

cv2:OpenCV 的核心模块,提供视频捕获、图像处理等功能。


2. 指定 IP Webcam 的视频流 URL

python 复制代码
ip_camera_url = 'http://192.168.0.100:8080/video'

ip_camera_url:是 IP Webcam 提供的视频流地址。你需要确保:

  • 手机和电脑在同一个局域网中。
  • 手机上运行的 IP Webcam 应用已经启动,并提供对应的 video 流(通常在默认端口 8080)。

3. 创建视频捕捉对象

python 复制代码
cap = cv2.VideoCapture(ip_camera_url)

cv2.VideoCapture():用于创建一个视频捕捉对象。

  • 如果传入的是摄像头的网络地址(如这里的 ip_camera_url),OpenCV 会尝试连接到对应的视频流。
  • 如果传入的是整数(如 0),OpenCV 会尝试访问本地的物理摄像头。

4. 检查是否成功连接

python 复制代码
if not cap.isOpened():
    print("无法连接到 IP Webcam!")
    exit()
  • cap.isOpened():检查视频捕捉对象是否成功连接到视频流。
  • 如果无法连接,可能是因为 URL 错误、网络问题或 IP Webcam 应用没有正确启动。

5. 设置窗口

python 复制代码
window_name = "what's U BF doing"
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
cv2.resizeWindow(window_name, 640, 480)
  • cv2.namedWindow() :创建一个显示窗口。
    • 参数 cv2.WINDOW_NORMAL 表示窗口可以调整大小。
  • cv2.resizeWindow():设置窗口的初始大小为 640x480 像素。

6. 开始循环读取视频帧

python 复制代码
while True:
    ret, frame = cap.read()
  • cap.read() :从视频流中读取一帧视频。
    • ret:布尔值,表示是否成功读取帧。
    • frame:读取的视频帧(以图像形式存储,类型是 Numpy 数组)。

7. 检查读取是否成功

python 复制代码
if not ret:
    print("读取视频帧失败!")
    break
  • 如果 retFalse,说明读取帧失败,可能是网络中断或视频流停止。

8. 显示视频帧

python 复制代码
cv2.imshow(window_name, frame)
  • cv2.imshow():将视频帧显示到指定窗口中。

9. 按键退出功能

python 复制代码
if cv2.waitKey(1) & 0xFF == ord('q'):
    break
  • cv2.waitKey(1) :等待键盘输入,参数 1 表示等待 1 毫秒。
  • & 0xFF:在某些系统中用于处理按键编码。
  • ord('q') :表示键盘按下字母 'q' 键。
  • 当按下 'q' 键时,程序退出循环,结束视频捕捉。

10. 释放资源和关闭窗口

python 复制代码
cap.release()
cv2.destroyAllWindows()
  • cap.release():释放视频捕捉对象,关闭与摄像头的连接。
  • cv2.destroyAllWindows():关闭所有由 OpenCV 创建的窗口。

运行效果

  1. 当代码运行后,OpenCV 会尝试连接到手机的 IP Webcam 视频流。
  2. 成功连接后,视频流会实时显示在名为 what's U BF doing 的窗口中。
  3. 按下 'q' 键即可退出程序并释放资源。

可能遇到的问题

  1. 无法连接到 IP Webcam

    • 检查 URL 是否正确,是否和手机处于同一局域网。
    • 确保 IP Webcam 在手机端已正确启动。
  2. 视频卡顿或延迟

    • 检查网络质量,视频分辨率可能过高。
  3. 显示窗口问题

    • 如果窗口大小设置过小或过大,可能需要调整 resizeWindow 的参数。

第四步:偷看的乐趣,不只是"男朋友"!

学会了这段代码,你可以有更多好玩的扩展,比如:

  • 监控猫主子:看看它会不会在沙发上偷偷挠抓。
  • 守护绿植:观察那些新种的小植物有没有长高。
  • 发现惊喜:或许你会抓到家里突然飞进一只小麻雀。

第五步:进一步探索,来点人工智能

我们是否可以基于cv2读取的内容做个自动识别,比如提供男朋友照片,发现他出现以后就发邮件提醒我男朋友来了,快去围观!

今天花姐就不实现这个功能了,后期如果感兴趣的人比较多,花姐在考虑是不是出个文章。这里提供一个思路,抛砖引玉。

人脸识别

可以使用face_recognition,它是一个非常流行且易于使用的 Python 库,专门用于进行人脸识别和处理。这个库背后采用的是深度学习技术,基于 dlib(一个强大的机器学习库)的人脸识别模型,提供了快速且准确的人脸识别能力。它不仅支持基础的人脸检测,还能完成面部特征点检测、面部表情识别、面部比对等高级功能。

是不是可以通过面部表情识功能统计下男朋友今天笑了几次?

邮件发送

smtplibemail库是个不错的选择,花姐的《0基础学Python》中有详细讲解用法。


结尾:技术虽好,记得用在正道上

最后友情提醒一句,千万别滥用这项技术哦,做个正直的程序员,记得事先获得"男朋友"或者其他人的同意。不然,代码的第一句可能就变成"如何恢复和平关系"了。😂

学会了这个技能,记得来告诉花姐,你是拿它来干啥的?监控猫?还是种子发芽?我先不说了,我要去看我家猫主子睡成啥奇怪的姿势了~ 🐾

相关推荐
OreoCC1 分钟前
第N5周:Pytorch文本分类入门
人工智能·pytorch·python
二两小咸鱼儿1 小时前
Java Demo - JUnit :Unit Test(Assert Methods)
java·后端·junit
字节源流1 小时前
【spring】配置类和整合Junit
java·后端·spring
zimoyin2 小时前
解决 Java/Kotlin 资源加载问题
java·python·kotlin
wjcroom2 小时前
数字投屏叫号器-发射端python窗口定制
开发语言·python
静候光阴2 小时前
python使用venv命令创建虚拟环境(ubuntu22)
linux·开发语言·python
Y1nhl2 小时前
力扣hot100_二叉树(4)_python版本
开发语言·pytorch·python·算法·leetcode·机器学习
zhuyasen2 小时前
Go语言配置解析:基于viper的conf库优雅解析配置文件
后端·go
2a3b4c2 小时前
读取 Resource 目录下文件内容
后端
Asthenia04123 小时前
NIO:Buffer对象均是在Jvm堆中分配么?听说过DirectByteBuffer和MappedByteBuffer么?
后端