v2 update
This commit is contained in:
parent
d1f3b1babb
commit
b00e6fe55d
|
@ -4,4 +4,7 @@
|
|||
*.mp4
|
||||
*.avi
|
||||
.ipynb_checkpoints
|
||||
tutorial02.ipynb
|
||||
tutorial02.ipynb
|
||||
|
||||
|
||||
help_test.py
|
37
README.md
37
README.md
|
@ -171,3 +171,40 @@ python opencv_webcam.py -ishsf -isrf -rrf 0.5
|
|||
python opencv_webcam.py -fsd custom_dir -isasf # 以自动版为例
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 指令查询
|
||||
|
||||
```shell
|
||||
python opencv_webcam_v02.py --help
|
||||
```
|
||||
|
||||
```shell
|
||||
usage: opencv_webcam_v02.py [-h] [--device DEVICE] [--quit QUIT] [--is_autoSaveFrame] [--is_headSaveFrame] [--is_resizeFrame] [--frame_saveDir FRAME_SAVEDIR] [--frame_nSave FRAME_NSAVE]
|
||||
[--frame_capKey FRAME_CAPKEY] [--resize_frame RESIZE_FRAME [RESIZE_FRAME ...]] [--resizeRatio_frame RESIZERATIO_FRAME]
|
||||
|
||||
OpenCV Webcam Script
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--device DEVICE, -dev DEVICE
|
||||
device index for webcam
|
||||
--quit QUIT, -q QUIT quit key for webcam
|
||||
--is_autoSaveFrame, -isasf
|
||||
is auto save frame
|
||||
--is_headSaveFrame, -ishsf
|
||||
is head save frame
|
||||
--is_resizeFrame, -isrf
|
||||
is resize frame
|
||||
--frame_saveDir FRAME_SAVEDIR, -fsd FRAME_SAVEDIR
|
||||
save frame dir
|
||||
--frame_nSave FRAME_NSAVE, -fns FRAME_NSAVE
|
||||
n frames save a frame (auto save frame)
|
||||
--frame_capKey FRAME_CAPKEY, -fck FRAME_CAPKEY
|
||||
frame capture key (head save frame)
|
||||
--resize_frame RESIZE_FRAME [RESIZE_FRAME ...], -rf RESIZE_FRAME [RESIZE_FRAME ...]
|
||||
resize frame save
|
||||
--resizeRatio_frame RESIZERATIO_FRAME, -rrf RESIZERATIO_FRAME
|
||||
resize ratio frame save
|
||||
```
|
||||
|
||||
|
|
|
@ -11,23 +11,35 @@ import glob
|
|||
import re
|
||||
import os
|
||||
|
||||
def parse_args(argv=None):
|
||||
parser = argparse.ArgumentParser(description = 'OpenCV Webcam Script')
|
||||
parser.add_argument('--device','-dev', default = 0, type = int, help = 'device index for webcam')
|
||||
parser.add_argument('--quit','-q', default = "q", type = str, help = 'quit key for webcam')
|
||||
parser.add_argument('--is_autoSaveFrame', '-isasf', action='store_true', help = 'is auto save frame')
|
||||
parser.add_argument('--is_headSaveFrame', '-ishsf', action='store_true', help = 'is head save frame')
|
||||
parser.add_argument('--is_resizeFrame', '-isrf', action='store_true', help = 'is resize frame')
|
||||
parser.add_argument('--frame_saveDir', '-fsd', default = "./WebcamFrame", type = str, help = 'save frame dir')
|
||||
parser.add_argument('--frame_nSave', '-fns', default = 1, type = int, help = 'n frames save a frame (auto save frame)')
|
||||
parser.add_argument('--frame_capKey', '-fck', default = "a", type = str, help = 'frame capture key (head save frame)')
|
||||
parser.add_argument('--resize_frame', '-rf', default = [640, 480], type = int, nargs = '+', help = 'resize frame save')
|
||||
parser.add_argument('--resizeRatio_frame', '-rrf', default = 1.0, type = float, help = 'resize ratio frame save')
|
||||
|
||||
global args
|
||||
args = parser.parse_args(argv)
|
||||
def parse_args(known=False):
|
||||
parser = argparse.ArgumentParser(description='OpenCV Webcam Script')
|
||||
parser.add_argument('--device', '-dev', default=0,
|
||||
type=int, help='device index for webcam')
|
||||
parser.add_argument('--quit', '-q', default="q",
|
||||
type=str, help='quit key for webcam')
|
||||
parser.add_argument('--is_autoSaveFrame', '-isasf',
|
||||
action='store_true', help='is auto save frame')
|
||||
parser.add_argument('--is_headSaveFrame', '-ishsf',
|
||||
action='store_true', help='is head save frame')
|
||||
parser.add_argument('--is_resizeFrame', '-isrf',
|
||||
action='store_true', help='is resize frame')
|
||||
parser.add_argument('--frame_saveDir', '-fsd',
|
||||
default="./WebcamFrame", type=str, help='save frame dir')
|
||||
parser.add_argument('--frame_nSave', '-fns', default=1,
|
||||
type=int, help='n frames save a frame (auto save frame)')
|
||||
parser.add_argument('--frame_capKey', '-fck', default="a",
|
||||
type=str, help='frame capture key (head save frame)')
|
||||
parser.add_argument('--resize_frame', '-rf',
|
||||
default=[640, 480], type=int, nargs='+', help='resize frame save')
|
||||
parser.add_argument('--resizeRatio_frame', '-rrf',
|
||||
default=1.0, type=float, help='resize ratio frame save')
|
||||
|
||||
# 保存路径管理
|
||||
args = parser.parse_known_args()[0] if known else parser.parse_args()
|
||||
return args
|
||||
|
||||
|
||||
# 保存路径管理
|
||||
def increment_path(path, exist_ok=False, sep='', mkdir=False):
|
||||
# 引用:https://github.com/ultralytics/yolov5/blob/master/utils/general.py
|
||||
path = Path(path) # os-agnostic
|
||||
|
@ -47,47 +59,58 @@ def increment_path(path, exist_ok=False, sep='', mkdir=False):
|
|||
|
||||
# webcam opencv
|
||||
def webcam_opencv(device_index, quit_key, is_autoSaveFrame, frame_saveDir, frame_nSave, is_headSaveFrame, frame_capKey, is_resizeFrame, resize_frame, resizeRatio_frame):
|
||||
cap = cv2.VideoCapture(device_index) # 连接设备
|
||||
frame_width = cap.get(3) # 宽度
|
||||
frame_height = cap.get(4) # 高度
|
||||
fps = cap.get(5) # 帧率
|
||||
s_time = time.time() # 起始时间
|
||||
|
||||
cap = cv2.VideoCapture(device_index) # 连接设备
|
||||
frame_width = cap.get(3) # 宽度
|
||||
frame_height = cap.get(4) # 高度
|
||||
fps = cap.get(5) # 帧率
|
||||
print(f'宽度:{frame_width}, 高度:{frame_height}, FPS:{fps}')
|
||||
success, _ = cap.read() # 读取设备
|
||||
success, _ = cap.read() # 读取设备
|
||||
|
||||
if success:
|
||||
print(f'摄像头连接成功!')
|
||||
|
||||
if is_autoSaveFrame or is_headSaveFrame:
|
||||
# 帧保存路径管理
|
||||
frame_samePath = increment_path(Path(f"{frame_saveDir}") / "frames", exist_ok=False) # 增量运行
|
||||
frame_samePath = increment_path(
|
||||
Path(f"{frame_saveDir}") / "frames", exist_ok=False) # 增量运行
|
||||
frame_samePath.mkdir(parents=True, exist_ok=True) # 创建目录
|
||||
|
||||
frame_num = 0 # 帧数
|
||||
|
||||
frame_num = 0 # 帧数
|
||||
while(1):
|
||||
ret, frame = cap.read() # 捕获画面
|
||||
ret, frame = cap.read() # 捕获画面
|
||||
frame_num += 1
|
||||
print(f'第{frame_num}帧')
|
||||
cv2.imshow("capture", frame) # 显示画面
|
||||
cv2.imshow("capture", frame) # 显示画面
|
||||
# print(frame.shape) # h,w,c
|
||||
if (is_autoSaveFrame): # 自动保存
|
||||
if (frame_num % frame_nSave == 0): # 每隔n帧保存一次
|
||||
if (is_resizeFrame): # resize frame
|
||||
w_resize = int(resize_frame[0] * resizeRatio_frame) # 重塑宽度
|
||||
h_resize = int(resize_frame[1] * resizeRatio_frame) # 重塑高度
|
||||
frame_new = cv2.resize(frame, (w_resize, h_resize), interpolation = cv2.INTER_AREA) # 重塑
|
||||
cv2.imwrite(f'./{frame_samePath}/{frame_num}.jpg', frame_new)
|
||||
if (is_autoSaveFrame): # 自动保存
|
||||
if (frame_num % frame_nSave == 0): # 每隔n帧保存一次
|
||||
if (is_resizeFrame): # resize frame
|
||||
w_resize = int(
|
||||
resize_frame[0] * resizeRatio_frame) # 重塑宽度
|
||||
h_resize = int(
|
||||
resize_frame[1] * resizeRatio_frame) # 重塑高度
|
||||
frame_new = cv2.resize(
|
||||
frame, (w_resize, h_resize), interpolation=cv2.INTER_AREA) # 重塑
|
||||
cv2.imwrite(
|
||||
f'./{frame_samePath}/{frame_num}.jpg', frame_new)
|
||||
else:
|
||||
cv2.imwrite(f'./{frame_samePath}/{frame_num}.jpg', frame)
|
||||
if (is_headSaveFrame): # 手动保存
|
||||
if cv2.waitKey(20) & 0xFF == ord(frame_capKey): # 保存键
|
||||
if (is_resizeFrame): # 重塑
|
||||
cv2.imwrite(
|
||||
f'./{frame_samePath}/{frame_num}.jpg', frame)
|
||||
if (is_headSaveFrame): # 手动保存
|
||||
if cv2.waitKey(20) & 0xFF == ord(frame_capKey): # 保存键
|
||||
if (is_resizeFrame): # 重塑
|
||||
w_resize = int(resize_frame[0] * resizeRatio_frame)
|
||||
h_resize = int(resize_frame[1] * resizeRatio_frame)
|
||||
frame_new = cv2.resize(frame, (w_resize, h_resize), interpolation = cv2.INTER_AREA)
|
||||
cv2.imwrite(f'./{frame_samePath}/{frame_num}.jpg', frame_new)
|
||||
frame_new = cv2.resize(
|
||||
frame, (w_resize, h_resize), interpolation=cv2.INTER_AREA)
|
||||
cv2.imwrite(
|
||||
f'./{frame_samePath}/{frame_num}.jpg', frame_new)
|
||||
else:
|
||||
cv2.imwrite(f'./{frame_samePath}/{frame_num}.jpg', frame)
|
||||
if cv2.waitKey(20) & 0xFF == ord(quit_key): # 退出 ord:字符转ASCII码
|
||||
cv2.imwrite(
|
||||
f'./{frame_samePath}/{frame_num}.jpg', frame)
|
||||
if cv2.waitKey(20) & 0xFF == ord(quit_key): # 退出 ord:字符转ASCII码
|
||||
break
|
||||
print(f'一共处理了{frame_num}帧')
|
||||
# 释放缓存
|
||||
|
@ -96,11 +119,12 @@ def webcam_opencv(device_index, quit_key, is_autoSaveFrame, frame_saveDir, frame
|
|||
else:
|
||||
print(f'摄像头连接异常!')
|
||||
|
||||
print(f'程序结束!')
|
||||
e_time = time.time() # 终止时间
|
||||
print(f'用时:{round((e_time - s_time), 3)}秒, {round((e_time - s_time)/60, 3)}分, {round((e_time - s_time)/3600, 3)}小时')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 参数
|
||||
parse_args()
|
||||
def main(args):
|
||||
device_index = args.device
|
||||
quit_key = args.quit
|
||||
is_autoSaveFrame = args.is_autoSaveFrame
|
||||
|
@ -117,6 +141,10 @@ if __name__ == '__main__':
|
|||
print(f'快捷键冲突!')
|
||||
else:
|
||||
# 调用webcam opencv
|
||||
webcam_opencv(device_index, quit_key, is_autoSaveFrame, frame_saveDir, frame_nSave, is_headSaveFrame, frame_capKey, is_resizeFrame, resize_frame, resizeRatio_frame)
|
||||
webcam_opencv(device_index, quit_key, is_autoSaveFrame, frame_saveDir, frame_nSave,
|
||||
is_headSaveFrame, frame_capKey, is_resizeFrame, resize_frame, resizeRatio_frame)
|
||||
|
||||
print(f'程序结束!')
|
||||
|
||||
if __name__ == '__main__':
|
||||
args = parse_args()
|
||||
main(args)
|
||||
|
|
Loading…
Reference in New Issue