第一次执行没事
第二次执行报错
ValueError: time data '3,2021 4:23:55 AM' does not match format '%m,%Y %I:%M:%S %p'
原因是一开始的时候, locale默认的语言是none, 一开始执行datetime.strptime缓存的语言是none, %p转化成的正则表达式是"AM/PM" 第一次执行cv2.imshow会强制设置locale的语言为当前计算机默认语言,我这里就是中文, 循环第二次执行到datetime.strptime检测到locale发生变化,会重新缓存语言是中文,解析%p的正则表达式就变成了"上午/下午" 从而导致报错
from datetime import datetime
import locale
import cv2
video = cv2.VideoCapture("/home/chf/视频/KBD test case 01-02/KBD_m1.mp4")
for _ in range(5):
return_value, frame = video.read()
return_valu = 1
set_locale = 0
while return_valu < 100:
return_value, frame = video.read()
a = datetime.strptime("3,2021 4:23:55 AM", "%m,%Y %I:%M:%S %p")
key = cv2.waitKey(20)
if key == 113:
video.release()
break
cv2.imshow(
"test",
(1920, 1080),
)
if set_locale == 0:
locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
set_locale = 1
return_valu += 1
解决方法:
- 方法1. 第一次执行完成cv2.imshow之后进行设置locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')一次就可以
- 反法2. 直接设置当前计算机的默认语言为en_US.UTF-8即可
# 修改当前计算机语言
sudo vim /etc/locale.gen
找到 en_US.UTF-8 UTF-8 行并取消注释(去掉行首的 #)。
生成语言环境:
sudo locale-gen
# 查看
(base) chf@chf:~$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=