Python?如何調(diào)用手機(jī)攝像頭
Python 調(diào)用手機(jī)攝像頭
在手機(jī)上安裝軟件
這里以安卓手機(jī)作為演示,ISO也是差不多的
軟件下載地址 (需要的朋友及時下載,鏈接有效期3天。)
注意:要想在電腦上查看手機(jī)攝像頭拍攝的內(nèi)容的在一個局域網(wǎng)里面(沒有 WIFI 可以使用 熱點 )
安裝完打開IP攝像頭服務(wù)器

點擊分享查看IP

查看局域網(wǎng)的IP

用Python的Opencv寫一個代碼來連接手機(jī)攝像頭
安裝opencv-python
pip install opencv-python
注意
可能安裝庫太慢可以這樣(這里使用的是清華的鏡像)
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/
保存的照片在當(dāng)前的py文件同級目錄下面的img里面
手機(jī)橫著,電腦顯示的也是橫著,反之
# 將圖像旋轉(zhuǎn)90度以豎直顯示 img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) # 5. 旋轉(zhuǎn)圖像
使用
- ESC: 退出界面
- 空格: 保存手機(jī)攝像頭的照片
代碼
import cv2
import os
# 創(chuàng)建窗口,設(shè)置為不能改變大小
cv2.namedWindow('camera', cv2.WINDOW_NORMAL) # 1. 修改窗口屬性,允許改變大小
# 攝像頭設(shè)置,這里使用的是網(wǎng)絡(luò)攝像頭的URL
video = 'http://admin:admin@192.168.1.103:8081'
capture = cv2.VideoCapture(video) # 2. 初始化攝像頭
# 初始化保存圖片的序號
p = 1
# 開始無限循環(huán),直到用戶中斷
while True:
success, img = capture.read() # 3. 從攝像頭讀取一幀圖像
if not success:
print("無法抓取幀") # 4. 如果讀取失敗,打印錯誤信息并退出循環(huán)
break
# 將圖像旋轉(zhuǎn)90度以豎直顯示
img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) # 5. 旋轉(zhuǎn)圖像
# 顯示圖像
cv2.imshow("camera", img) # 6. 在窗口中顯示圖像
# 按鍵處理
key = cv2.waitKey(10) # 7. 等待用戶按鍵,10毫秒響應(yīng)一次
if key == 27: # 8. 如果按下ESC鍵(ASCII碼為27),退出循環(huán)
break
elif key == ord(' '): # 9. 如果按下空格鍵(ASCII碼為32),保存圖片
# 保存圖片到當(dāng)前目錄下的img文件夾中
img_folder = 'img'
if not os.path.exists(img_folder):
os.makedirs(img_folder) # 10. 如果不存在img文件夾,則創(chuàng)建
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()
# 關(guān)閉所有OpenCV創(chuàng)建的窗口
cv2.destroyAllWindows()注意
video的地址替換為查看局域網(wǎng)的IP時看到的地址

展示效果
電腦端

手機(jī)拍攝

分辨率低,也就是圖片還是有點模糊
解釋
導(dǎo)入必要的庫
import cv2 import os
首先,導(dǎo)入cv2模塊(OpenCV庫)用于圖像處理和視頻流操作,以及os模塊用于文件路徑操作。
創(chuàng)建窗口
cv2.namedWindow('camera', cv2.WINDOW_NORMAL)創(chuàng)建一個名為camera的窗口,并設(shè)置為可以改變大小。
攝像頭設(shè)置
video = 'http://admin:admin@192.168.1.103:8081' capture = cv2.VideoCapture(video)
設(shè)置網(wǎng)絡(luò)攝像頭的URL,并初始化攝像頭對象。
初始化保存圖片的序號
p = 1
初始化一個變量p用于保存圖片時的序號。
主循環(huán)
while True:
開始一個無限循環(huán),用于持續(xù)捕獲和處理視頻幀。
讀取視頻幀
success, img = capture.read()
從攝像頭捕獲一幀圖像。success是一個布爾值,表示是否成功捕獲幀,img是捕獲到的圖像。
圖像旋轉(zhuǎn)
if not success:
print("無法抓取幀")
break
img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)如果未能成功捕獲幀,則打印錯誤信息并退出循環(huán)。成功捕獲后,將圖像旋轉(zhuǎn)90度以豎直方向顯示。
顯示圖像
cv2.imshow("camera", img)將旋轉(zhuǎn)后的圖像顯示在之前創(chuàng)建的camera窗口中。
按鍵處理
key = cv2.waitKey(10)
等待用戶按鍵操作,如果在10毫秒內(nèi)有按鍵則響應(yīng)。
if key == 27:
break
elif key == ord(' '):如果用戶按下ESC鍵(ASCII碼為27),則退出循環(huán)。如果按下空格鍵(ASCII碼為32),則保存當(dāng)前幀為圖片。
保存圖片
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的文件夾,如果不存在則創(chuàng)建。生成圖片文件名,并將當(dāng)前幀保存為圖片。打印保存圖片的信息,并更新圖片序號。
釋放資源
capture.release() cv2.destroyAllWindows()
循環(huán)結(jié)束后,釋放攝像頭資源,并關(guān)閉所有OpenCV創(chuàng)建的窗口。
到此這篇關(guān)于Python 調(diào)用手機(jī)攝像頭的文章就介紹到這了,更多相關(guān)Python 調(diào)用手機(jī)攝像頭內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python統(tǒng)計指定目錄內(nèi)文件的代碼行數(shù)
這篇文章主要介紹了python統(tǒng)計指定目錄內(nèi)文件的代碼行數(shù)2019-09-09
Pytorch框架實現(xiàn)mnist手寫庫識別(與tensorflow對比)
這篇文章主要介紹了Pytorch框架實現(xiàn)mnist手寫庫識別(與tensorflow對比),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Python PyWebIO提升團(tuán)隊效率使用介紹
這篇文章主要為大家介紹了Python PyWebIO提升團(tuán)隊效率使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Numpy之random函數(shù)使用學(xué)習(xí)
這篇文章主要介紹了Numpy之random使用學(xué)習(xí),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01

