mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Fixed bug with image processing; modified error handling
This commit is contained in:
parent
de5240bb3b
commit
6f47d67961
@ -232,17 +232,16 @@ class OMVGtk:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# stop running code
|
# stop running code
|
||||||
openmv.stop_script();
|
openmv.stop_script()
|
||||||
except:
|
# release OpenMV
|
||||||
|
openmv.release()
|
||||||
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
finally:
|
||||||
# release OpenMV
|
self.connected = False
|
||||||
openmv.release()
|
self._update_title()
|
||||||
|
self.connect_button.set_sensitive(True)
|
||||||
self.connected = False
|
map(lambda x:x.set_sensitive(False), self.controls)
|
||||||
self._update_title()
|
|
||||||
self.connect_button.set_sensitive(True)
|
|
||||||
map(lambda x:x.set_sensitive(False), self.controls)
|
|
||||||
|
|
||||||
def connect_clicked(self, widget):
|
def connect_clicked(self, widget):
|
||||||
self.connect()
|
self.connect()
|
||||||
@ -403,7 +402,7 @@ class OMVGtk:
|
|||||||
self.statusbar.pop(self.statusbar_ctx)
|
self.statusbar.pop(self.statusbar_ctx)
|
||||||
self.statusbar.push(self.statusbar_ctx, rgb)
|
self.statusbar.push(self.statusbar_ctx, rgb)
|
||||||
|
|
||||||
def _rgb(rgb):
|
def _rgb(self, rgb):
|
||||||
return struct.pack("BBB", ((rgb & 0xF800) >> 11)*255/31, ((rgb & 0x07E0)>>5)*255/63, (rgb & 0x001F)*255/31)
|
return struct.pack("BBB", ((rgb & 0xF800) >> 11)*255/31, ((rgb & 0x07E0)>>5)*255/63, (rgb & 0x001F)*255/31)
|
||||||
|
|
||||||
def update_drawing(self):
|
def update_drawing(self):
|
||||||
@ -437,11 +436,11 @@ class OMVGtk:
|
|||||||
# JPEG
|
# JPEG
|
||||||
try:
|
try:
|
||||||
buff = Image.frombuffer("RGB", (w, h), buf, "jpeg", "RGB", "").tostring()
|
buff = Image.frombuffer("RGB", (w, h), buf, "jpeg", "RGB", "").tostring()
|
||||||
print('fix JPEG return')
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('JPEG decode error (%s)' % e)
|
print('JPEG decode error (%s)' % e)
|
||||||
buff = None
|
buff = None
|
||||||
else:
|
else:
|
||||||
|
print len(buff), w, h, w*h*3
|
||||||
if len(buff) != w*h*3:
|
if len(buff) != w*h*3:
|
||||||
print('JPEG buff len != w*h*bpp')
|
print('JPEG buff len != w*h*bpp')
|
||||||
buff = None
|
buff = None
|
||||||
@ -454,8 +453,9 @@ class OMVGtk:
|
|||||||
|
|
||||||
if buff:
|
if buff:
|
||||||
# create pixbuf from np array
|
# create pixbuf from np array
|
||||||
self.pixbuf = gtk.gdk.pixbuf_new_from_data(buff, gtk.gdk.COLORSPACE_RGB, False, 8, w, h, w*h*2)
|
self.pixbuf = gtk.gdk.pixbuf_new_from_data(buff, gtk.gdk.COLORSPACE_RGB, False, 8, w, h, w*3)
|
||||||
self.pixbuf = self.pixbuf.scale_simple(w*SCALE, h*SCALE, gtk.gdk.INTERP_BILINEAR)
|
self.pixbuf = self.pixbuf.scale_simple(w*SCALE, h*SCALE, gtk.gdk.INTERP_BILINEAR)
|
||||||
|
|
||||||
self.drawingarea.realize()
|
self.drawingarea.realize()
|
||||||
cm = self.drawingarea.window.get_colormap()
|
cm = self.drawingarea.window.get_colormap()
|
||||||
gc = self.drawingarea.window.new_gc(foreground=cm.alloc_color('#FFFFFF', True, False))
|
gc = self.drawingarea.window.new_gc(foreground=cm.alloc_color('#FFFFFF', True, False))
|
||||||
|
|||||||
@ -53,6 +53,7 @@ FORMAT_GRAY = 3
|
|||||||
def init():
|
def init():
|
||||||
global __dev
|
global __dev
|
||||||
# find USB __device
|
# find USB __device
|
||||||
|
print('OpenMV Cam init()')
|
||||||
try:
|
try:
|
||||||
__dev = usb.core.find(idVendor=__VID, idProduct=__PID)
|
__dev = usb.core.find(idVendor=__VID, idProduct=__PID)
|
||||||
|
|
||||||
@ -68,9 +69,9 @@ def init():
|
|||||||
|
|
||||||
# set FB debug alt setting
|
# set FB debug alt setting
|
||||||
__dev.set_interface_altsetting(__INTERFACE, __ALTSETTING)
|
__dev.set_interface_altsetting(__INTERFACE, __ALTSETTING)
|
||||||
except USBError as e:
|
except Exception as e:
|
||||||
pass
|
pass
|
||||||
print('USB error while searching for OpenMV Cam: %s' % e.message)
|
print('Error while searching for OpenMV Cam: %s' % e.message)
|
||||||
|
|
||||||
|
|
||||||
def find():
|
def find():
|
||||||
@ -78,11 +79,10 @@ def find():
|
|||||||
try:
|
try:
|
||||||
dev = usb.core.find(idVendor=__VID, idProduct=__PID)
|
dev = usb.core.find(idVendor=__VID, idProduct=__PID)
|
||||||
except USBError:
|
except USBError:
|
||||||
print('OpenMV Cam NOT found')
|
|
||||||
pass
|
pass
|
||||||
|
found = False
|
||||||
else:
|
else:
|
||||||
if dev:
|
if dev:
|
||||||
print('OpenMV Cam found')
|
|
||||||
found = True
|
found = True
|
||||||
finally:
|
finally:
|
||||||
return found
|
return found
|
||||||
@ -90,12 +90,13 @@ def find():
|
|||||||
|
|
||||||
def release():
|
def release():
|
||||||
try:
|
try:
|
||||||
# Release device
|
# Release device resources, interface, etc.
|
||||||
usb.util.dispose_resources(__dev)
|
usb.util.dispose_resources(__dev)
|
||||||
|
|
||||||
# reattach kernel driver
|
# reattach kernel driver
|
||||||
#__dev.attach_kernel_driver(__INTERFACE)
|
#__dev.attach_kernel_driver(__INTERFACE)
|
||||||
except USBError:
|
except USBError as e:
|
||||||
|
print('error disposing resources %s' % e)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@ -109,45 +110,56 @@ def fb_size():
|
|||||||
def fb_lock():
|
def fb_lock():
|
||||||
try:
|
try:
|
||||||
buf = __dev.ctrl_transfer(0xC1, __USBDBG_FRAME_LOCK, 0, __INTERFACE, 1, __TIMEOUT)
|
buf = __dev.ctrl_transfer(0xC1, __USBDBG_FRAME_LOCK, 0, __INTERFACE, 1, __TIMEOUT)
|
||||||
return struct.unpack("B", buf)[0]
|
|
||||||
except USBError:
|
except USBError:
|
||||||
|
pass
|
||||||
return 0
|
return 0
|
||||||
|
else:
|
||||||
|
return struct.unpack("B", buf)[0]
|
||||||
|
|
||||||
|
|
||||||
def fb_get():
|
def fb_get():
|
||||||
if fb_lock() == 0:
|
if fb_lock() == 0:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
buf = __dev.ctrl_transfer(0xC1, __USBDBG_FRAME_SIZE, 0, __INTERFACE, __FB_HDR_SIZE, __TIMEOUT)
|
try:
|
||||||
size = struct.unpack("III", buf)
|
buf = __dev.ctrl_transfer(0xC1, __USBDBG_FRAME_SIZE, 0, __INTERFACE, __FB_HDR_SIZE, __TIMEOUT)
|
||||||
|
except USBError as e:
|
||||||
w = size[0]
|
pass
|
||||||
h = size[1]
|
return None
|
||||||
bpp = size[2]
|
|
||||||
|
|
||||||
if bpp > 2:
|
|
||||||
# bpp is actually image size and data is in JPEG format
|
|
||||||
num_bytes = bpp
|
|
||||||
fmt = FORMAT_JPEG
|
|
||||||
else:
|
else:
|
||||||
num_bytes = w * h * bpp
|
size = struct.unpack("III", buf)
|
||||||
if bpp == 1:
|
|
||||||
fmt = FORMAT_GRAY
|
w = size[0]
|
||||||
elif bpp == 2:
|
h = size[1]
|
||||||
fmt = FORMAT_RGB565
|
bpp = size[2]
|
||||||
|
|
||||||
|
if bpp > 2:
|
||||||
|
# bpp is actually image size and data is in JPEG format
|
||||||
|
num_bytes = bpp
|
||||||
|
fmt = FORMAT_JPEG
|
||||||
else:
|
else:
|
||||||
fmt = None
|
num_bytes = w * h * bpp
|
||||||
w = None
|
if bpp == 1:
|
||||||
h = None
|
fmt = FORMAT_GRAY
|
||||||
|
elif bpp == 2:
|
||||||
|
fmt = FORMAT_RGB565
|
||||||
|
else:
|
||||||
|
fmt = None
|
||||||
|
w = None
|
||||||
|
h = None
|
||||||
|
|
||||||
if fmt:
|
if fmt:
|
||||||
# read fb data
|
# read fb data
|
||||||
__dev.ctrl_transfer(0xC1, __USBDBG_FRAME_DUMP, num_bytes/4, __INTERFACE, 0, __TIMEOUT)
|
try:
|
||||||
buff = __dev.read(__IN_EP, num_bytes, __INTERFACE, __TIMEOUT)
|
__dev.ctrl_transfer(0xC1, __USBDBG_FRAME_DUMP, num_bytes/4, __INTERFACE, 0, __TIMEOUT)
|
||||||
else:
|
except USBError:
|
||||||
buff = None
|
pass
|
||||||
|
else:
|
||||||
|
buff = __dev.read(__IN_EP, num_bytes, __INTERFACE, __TIMEOUT)
|
||||||
|
else:
|
||||||
|
buff = None
|
||||||
|
|
||||||
return fmt, w, h, buff
|
return fmt, w, h, buff
|
||||||
|
|
||||||
|
|
||||||
def fb_update():
|
def fb_update():
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user