gphoto2 如何处理失焦警告
gphoto2 how to handle Out of Focus warning
这是我用相机拍摄图像的方式
import logging
import gphoto2 as gp
def main():
def callback(level, domain, string, data=None):
print('Callback: level =', level, ', domain =', domain, ', string =', string)
if data:
print('Callback data:', data)
logging.basicConfig(
format='%(levelname)s: %(name)s: %(message)s', level=logging.WARNING)
callback_obj = gp.check_result(gp.use_python_logging())
camera = gp.Camera()
camera.init()
try:
camera_file_path = gp.check_result(camera.capture(gp.GP_CAPTURE_IMAGE))
except gp.GPhoto2Error as ex:
print("callback: ", ex, ex.code, ex.message, ex.string)
camera.exit()
if __name__ == "__main__" : exit(main())
如果相机无法对焦,则会生成以下错误
...
WARNING: gphoto2: (ptp_usb_getresp [usb.c:466]) PTP_OC 0x90c8 receiving resp failed: Out of Focus (0xa002)
WARNING: gphoto2: (camera_nikon_capture [library.c:3153]) 'ret' failed: 'Out of Focus' (0xa002)
WARNING: gphoto2: (gp_context_error) Out of Focus
WARNING: gphoto2: (gp_camera_capture [gphoto2-camera.c:1340]) 'camera->functions->capture (camera, type, path, context)' failed: -1
('callback: ', GPhoto2Error('[-1] Unspecified error',), -1, '[-1] Unspecified error', 'Unspecified error')
异常错误代码是-1
,但是如何捕获Out of Focus
警告?
更新
已从日志中过滤掉不必要的错误
import logging
import gphoto2 as gp
from datetime import datetime
def main():
def callback(level, domain, string, data=None):
err_codes = ("(0x2005)", "(0x2019)")
if not string.decode().endswith(err_codes):
print("[{0}] {1}: {2}".format(datetime.utcnow(), domain.decode(), string.decode()))
if data:
print('Callback data:', data)
callback_obj = gp.check_result(gp.gp_log_add_func(gp.GP_LOG_ERROR, callback))
camera = gp.Camera()
try:
camera.init()
except gp.GPhoto2Error as err:
exit(err.code)
try:
camera_file_path = camera.capture(gp.GP_CAPTURE_IMAGE)
except gp.GPhoto2Error as err:
exit(err.code)
camera.exit()
if __name__ == "__main__" : exit(main())
如果你能弄清楚记录器的名称,你可以添加你自己的处理程序并进行你自己的日志处理。
使用您的相机库名称调用 "getLogger" 即可获取记录器。
使用自定义处理程序对该记录器调用 AddHandler 将允许您对来自该记录器的日志进行自己的日志处理。
请参阅Python's Logging Cookbook for more info
希望对您有所帮助
您已经定义了一个回调函数,您可以在其中解析错误字符串以检测失焦,但您尚未安装回调函数,因此 libgphoto2 未使用它。使用 gp_log_add_func
安装回调。
此外,您将 camera.capture
的 return 值传递给 gp.check_result
。这是不正确的,因为 camera.capture
已经检查了结果并在出现错误时引发异常。
这是我用相机拍摄图像的方式
import logging
import gphoto2 as gp
def main():
def callback(level, domain, string, data=None):
print('Callback: level =', level, ', domain =', domain, ', string =', string)
if data:
print('Callback data:', data)
logging.basicConfig(
format='%(levelname)s: %(name)s: %(message)s', level=logging.WARNING)
callback_obj = gp.check_result(gp.use_python_logging())
camera = gp.Camera()
camera.init()
try:
camera_file_path = gp.check_result(camera.capture(gp.GP_CAPTURE_IMAGE))
except gp.GPhoto2Error as ex:
print("callback: ", ex, ex.code, ex.message, ex.string)
camera.exit()
if __name__ == "__main__" : exit(main())
如果相机无法对焦,则会生成以下错误
...
WARNING: gphoto2: (ptp_usb_getresp [usb.c:466]) PTP_OC 0x90c8 receiving resp failed: Out of Focus (0xa002)
WARNING: gphoto2: (camera_nikon_capture [library.c:3153]) 'ret' failed: 'Out of Focus' (0xa002)
WARNING: gphoto2: (gp_context_error) Out of Focus
WARNING: gphoto2: (gp_camera_capture [gphoto2-camera.c:1340]) 'camera->functions->capture (camera, type, path, context)' failed: -1
('callback: ', GPhoto2Error('[-1] Unspecified error',), -1, '[-1] Unspecified error', 'Unspecified error')
异常错误代码是-1
,但是如何捕获Out of Focus
警告?
更新
已从日志中过滤掉不必要的错误
import logging
import gphoto2 as gp
from datetime import datetime
def main():
def callback(level, domain, string, data=None):
err_codes = ("(0x2005)", "(0x2019)")
if not string.decode().endswith(err_codes):
print("[{0}] {1}: {2}".format(datetime.utcnow(), domain.decode(), string.decode()))
if data:
print('Callback data:', data)
callback_obj = gp.check_result(gp.gp_log_add_func(gp.GP_LOG_ERROR, callback))
camera = gp.Camera()
try:
camera.init()
except gp.GPhoto2Error as err:
exit(err.code)
try:
camera_file_path = camera.capture(gp.GP_CAPTURE_IMAGE)
except gp.GPhoto2Error as err:
exit(err.code)
camera.exit()
if __name__ == "__main__" : exit(main())
如果你能弄清楚记录器的名称,你可以添加你自己的处理程序并进行你自己的日志处理。
使用您的相机库名称调用 "getLogger" 即可获取记录器。
使用自定义处理程序对该记录器调用 AddHandler 将允许您对来自该记录器的日志进行自己的日志处理。
请参阅Python's Logging Cookbook for more info
希望对您有所帮助
您已经定义了一个回调函数,您可以在其中解析错误字符串以检测失焦,但您尚未安装回调函数,因此 libgphoto2 未使用它。使用 gp_log_add_func
安装回调。
此外,您将 camera.capture
的 return 值传递给 gp.check_result
。这是不正确的,因为 camera.capture
已经检查了结果并在出现错误时引发异常。