def test_parameter(self): c = vx.CreateContext() g = vx.CreateGraph(c) img = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_U8) dx = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_S16) dy = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_S16) node = vx.Sobel3x3Node(g, img, dx, dy) param = vx.GetParameterByIndex(node, 0) assert vx.GetStatus(vx.reference(param)) == vx.SUCCESS assert vx.QueryReference(vx.reference(param), vx.REF_ATTRIBUTE_TYPE, 'vx_enum') == (vx.SUCCESS, vx.TYPE_PARAMETER) s, v = vx.QueryParameter(param, vx.PARAMETER_ATTRIBUTE_REF, "vx_reference") assert s == vx.SUCCESS assert v == img assert vx.SetParameterByIndex(node, 0, vx.reference(dx)) == vx.SUCCESS s, v = vx.QueryParameter(param, vx.PARAMETER_ATTRIBUTE_REF, "vx_reference") assert s == vx.SUCCESS assert v == dx assert vx.SetParameterByReference(param, vx.reference(dy)) == vx.SUCCESS s, v = vx.QueryParameter(param, vx.PARAMETER_ATTRIBUTE_REF, "vx_reference") assert s == vx.SUCCESS assert v == dy assert vx.ReleaseParameter(param) == vx.SUCCESS assert vx.ReleaseContext(c) == vx.SUCCESS
def __enter__(self): if self.context is None: self.context = Context() self.vx_context = self.context.get_context() if self.graph is None: self.graph = vx.CreateGraph(self.vx_context) return self
def main(): # go_pro = GoProCamera() # go_pro.shoot_still() name = '3' pil_img = Image.open('3.JPG') #go_pro.get_image() pil_img = pil_img.convert('L') pil_img = pil_img.resize((600, 800)) # OpenVX context = vx.CreateContext() graph = vx.CreateGraph(context) img_w = pil_img.width img_h = pil_img.height vxImage = pil2vx(context, pil_img) grey = vx.CreateImage(context, img_w, img_h, vx.DF_IMAGE_U8) images = [ vx.CreateImage(context, img_w, img_h, vx.DF_IMAGE_S16), vx.CreateImage(context, img_w, img_h, vx.DF_IMAGE_S16), vx.CreateImage(context, img_w, img_h, vx.DF_IMAGE_S16), vx.CreateImage(context, img_w, img_h, vx.DF_IMAGE_U8), vx.CreateImage(context, img_w, img_h, vx.DF_IMAGE_U8), vx.CreateImage(context, img_w, img_h, vx.DF_IMAGE_U8) ] vx.Sobel3x3Node(graph, vxImage, images[1], images[2]) vx.MagnitudeNode(graph, images[1], images[2], images[0]) vx.PhaseNode(graph, images[1], images[2], images[3]) threshold = vx.CreateThreshold(context, vx.THRESHOLD_TYPE_RANGE, vx.TYPE_UINT8) #vx.SetThresholdAttribute(threshold,vx.THRESHOLD_ATTRIBUTE_THRESHOLD_up, 10, "vx_uint32") vx.SetThresholdAttribute(threshold, vx.THRESHOLD_ATTRIBUTE_THRESHOLD_LOWER, 10, "vx_uint32") vx.SetThresholdAttribute(threshold, vx.THRESHOLD_ATTRIBUTE_THRESHOLD_UPPER, 100, "vx_uint32") print vx.QueryThreshold(threshold, vx.THRESHOLD_ATTRIBUTE_THRESHOLD_UPPER, "vx_uint32") print vx.QueryThreshold(threshold, vx.THRESHOLD_ATTRIBUTE_THRESHOLD_LOWER, "vx_uint32") vx.CannyEdgeDetectorNode(graph, vxImage, threshold, 3, vx.NORM_L1, images[4]) status = vx.VerifyGraph(graph) if status == vx.SUCCESS: status = vx.ProcessGraph(graph) print status mag = vx2np(images[0]) phase = vx2np(images[3]) canny = vx2np(images[4]) pil_img.save(name + '_input.jpg') Image.fromarray(mag).save(name + '_magnitude.jpg') Image.fromarray(canny).save(name + '_canny.jpg') pil_img.show('Source') if True: # Show image using PIL pil_img.show() Image.fromarray(mag).show('Magnitued') Image.fromarray(phase).show('Phase') Image.fromarray(canny).show('Canny edge detector')
def __init__(self, ctx=None, verify=False): self.verify = verify if ctx is None: self.graph = None self.vx_ref = None self.context = None else: self.graph = vx.CreateGraph(ctx.vx_context) self.vx_ref = vx.reference(self.graph) self.context = ctx self.vx_context = ctx.get_context()
def test_sobel(self): c = vx.CreateContext() img = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_U8) dx = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_S16) dy = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_S16) g = vx.CreateGraph(c) node = vx.Sobel3x3Node(g, img, dx, dy) assert vx.GetStatus(vx.reference(node)) == vx.SUCCESS assert vx.VerifyGraph(g) == vx.SUCCESS assert vx.ProcessGraph(g) == vx.SUCCESS # FIXME: assert something assert vx.ReleaseContext(c) == vx.SUCCESS
def test_graph(self): c = vx.CreateContext() g = vx.CreateGraph(c) assert vx.GetStatus(vx.reference(g)) == vx.SUCCESS assert vx.QueryReference(vx.reference(g), vx.REF_ATTRIBUTE_TYPE, 'vx_enum') == (vx.SUCCESS, vx.TYPE_GRAPH) assert vx.IsGraphVerified(g) == vx.false_e assert vx.QueryGraph(g, vx.GRAPH_ATTRIBUTE_NUMNODES, 'vx_uint32') == (vx.SUCCESS, 0) img = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_U8) dx = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_S16) dy = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_S16) node = vx.Sobel3x3Node(g, img, dx, dy) assert vx.VerifyGraph(g) == vx.SUCCESS assert vx.ProcessGraph(g) == vx.SUCCESS assert vx.ScheduleGraph(g) == vx.SUCCESS assert vx.WaitGraph(g) == vx.SUCCESS p = vx.GetParameterByIndex(node, 0) assert vx.AddParameterToGraph(g, p) == vx.SUCCESS p2 = vx.GetGraphParameterByIndex(g, 0) assert vx.SetGraphParameterByIndex(g, 0, vx.reference(dx)) == vx.SUCCESS assert vx.VerifyGraph(g) != vx.SUCCESS assert vx.SetGraphParameterByIndex(g, 0, vx.reference(img)) == vx.SUCCESS assert vx.VerifyGraph(g) == vx.SUCCESS assert vx.IsGraphVerified(g) == vx.true_e def callback(node): callback.called = True return vx.SUCCESS assert vx.AssignNodeCallback(node, callback) == vx.SUCCESS assert vx.ProcessGraph(g) == vx.SUCCESS assert callback.called def callback(node): raise TypeError('Escaping from callback') return vx.SUCCESS assert vx.AssignNodeCallback(node, callback) != vx.SUCCESS assert vx.AssignNodeCallback(node, None) == vx.SUCCESS assert vx.AssignNodeCallback(node, callback) == vx.SUCCESS assert vx.VerifyGraph(g) == vx.SUCCESS assert vx.ProcessGraph(g) != vx.SUCCESS img = vx.CreateVirtualImage(g, 640, 480, vx.DF_IMAGE_RGB) assert vx.GetStatus(vx.reference(img)) == vx.SUCCESS assert vx.ReleaseGraph(g) == vx.SUCCESS assert vx.ReleaseContext(c) == vx.SUCCESS
def test_pyramid(self): c = vx.CreateContext() pyramid = vx.CreatePyramid(c, 4, vx.SCALE_PYRAMID_HALF, 640, 480, vx.DF_IMAGE_U8) assert vx.GetStatus(vx.reference(pyramid)) == vx.SUCCESS assert vx.QueryReference(vx.reference(pyramid), vx.REF_ATTRIBUTE_TYPE, 'vx_enum') == (vx.SUCCESS, vx.TYPE_PYRAMID) assert vx.QueryPyramid(pyramid, vx.PYRAMID_ATTRIBUTE_WIDTH, 'vx_uint32') == (vx.SUCCESS, 640) img = vx.GetPyramidLevel(pyramid, 1) assert img assert vx.QueryImage(img, vx.IMAGE_ATTRIBUTE_WIDTH, 'vx_uint32') == (vx.SUCCESS, 320) g = vx.CreateGraph(c) p = vx.CreateVirtualPyramid(g, 3, vx.SCALE_PYRAMID_HALF, 0, 0, vx.DF_IMAGE_VIRT) assert vx.ReleasePyramid(p) == vx.SUCCESS assert vx.ReleasePyramid(pyramid) == vx.SUCCESS assert vx.ReleaseContext(c) == vx.SUCCESS
def test_array(self): c = vx.CreateContext() arr = vx.CreateArray(c, vx.TYPE_COORDINATES2D, 64) assert vx.GetStatus(vx.reference(arr)) == vx.SUCCESS assert vx.QueryReference(vx.reference(arr), vx.REF_ATTRIBUTE_TYPE, 'vx_enum') == (vx.SUCCESS, vx.TYPE_ARRAY) assert vx.QueryArray(arr, vx.ARRAY_ATTRIBUTE_CAPACITY, 'vx_size') == (vx.SUCCESS, 64) s, size = vx.QueryArray(arr, vx.ARRAY_ATTRIBUTE_ITEMSIZE, 'vx_size') data = array('B', [0]) * size * 10 d = vx.ArrayItem('vx_coordinates2d_t', data, 0, size) d.x, d.y, d[1].x, d[1].y = 1, 2, 3, 4 assert vx.AddArrayItems(arr, 10, data, size) == vx.SUCCESS assert vx.AddArrayItems(arr, 10, d, size) == vx.SUCCESS assert vx.QueryArray(arr, vx.ARRAY_ATTRIBUTE_NUMITEMS, 'vx_size') == (vx.SUCCESS, 20) assert vx.TruncateArray(arr, 15) == vx.SUCCESS assert vx.QueryArray(arr, vx.ARRAY_ATTRIBUTE_NUMITEMS, 'vx_size') == (vx.SUCCESS, 15) status, stride, ptr = vx.AccessArrayRange(arr, 0, 14, None, None, vx.READ_AND_WRITE) assert status == vx.SUCCESS d0 = vx.ArrayItem('vx_coordinates2d_t', ptr, 0, stride) d1 = vx.ArrayItem('vx_coordinates2d_t', ptr, 1, stride) assert (d0.x, d0.y, d1.x, d1.y) == (1, 2, 3, 4) d1.y = 42 assert vx.CommitArrayRange(arr, 0, 14, ptr) == vx.SUCCESS data = array('B', [0]) * size * 15 * 2 status, stride, ptr = vx.AccessArrayRange(arr, 0, 14, size*2, data, vx.READ_AND_WRITE) assert stride == size*2 d = vx.ArrayItem('vx_coordinates2d_t', data, 0, size) assert (d.x, d.y, d[2].x, d[2].y) == (1, 2, 3, 42) assert vx.CommitArrayRange(arr, 0, 14, ptr) == vx.SUCCESS g = vx.CreateGraph(c) a = vx.CreateVirtualArray(g, vx.TYPE_KEYPOINT, 64) assert vx.ReleaseArray(a) == vx.SUCCESS assert vx.ReleaseArray(arr) == vx.SUCCESS assert vx.ReleaseContext(c) == vx.SUCCESS
def test_node(self): c = vx.CreateContext() g = vx.CreateGraph(c) k = vx.GetKernelByEnum(c, vx.KERNEL_SOBEL_3x3) assert vx.GetStatus(vx.reference(k)) == vx.SUCCESS node = vx.CreateGenericNode(g, k) assert vx.GetStatus(vx.reference(node)) == vx.SUCCESS assert vx.QueryReference(vx.reference(node), vx.REF_ATTRIBUTE_TYPE, 'vx_enum') == (vx.SUCCESS, vx.TYPE_NODE) s = vx.SetNodeAttribute(node, vx.NODE_ATTRIBUTE_BORDER_MODE, vx.border_mode_t(vx.BORDER_MODE_CONSTANT, 42)) assert s == vx.SUCCESS s, v = vx.QueryNode(node, vx.NODE_ATTRIBUTE_BORDER_MODE, 'vx_border_mode_t') assert v.mode == vx.BORDER_MODE_CONSTANT assert v.constant_value == 42 assert vx.ReleaseNode(node) == vx.SUCCESS node = vx.CreateGenericNode(g, k) assert vx.RemoveNode(node) == vx.SUCCESS assert vx.ReleaseGraph(g) == vx.SUCCESS assert vx.ReleaseContext(c) == vx.SUCCESS
def test_delay(self): c = vx.CreateContext() img = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_RGB) delay = vx.CreateDelay(c, vx.reference(img), 3) assert vx.GetStatus(vx.reference(delay)) == vx.SUCCESS assert vx.QueryReference(vx.reference(delay), vx.REF_ATTRIBUTE_TYPE, 'vx_enum') == (vx.SUCCESS, vx.TYPE_DELAY) assert vx.QueryDelay(delay, vx.DELAY_ATTRIBUTE_SLOTS, 'vx_size') == (vx.SUCCESS, 3) ref0 = vx.GetReferenceFromDelay(delay, 0) ref1 = vx.GetReferenceFromDelay(delay, 1) ref2 = vx.GetReferenceFromDelay(delay, 2) g = vx.CreateGraph(c) node = vx.Sobel3x3Node(g, vx.from_reference(ref0), vx.from_reference(ref1), vx.from_reference(ref2)) param = vx.GetParameterByIndex(node, 1) s, v = vx.QueryParameter(param, vx.PARAMETER_ATTRIBUTE_REF, "vx_reference") assert s == vx.SUCCESS assert v == ref1 assert vx.AgeDelay(delay) == vx.SUCCESS s, v = vx.QueryParameter(param, vx.PARAMETER_ATTRIBUTE_REF, "vx_reference") assert s == vx.SUCCESS assert v == ref0 assert vx.ReleaseDelay(delay) == vx.SUCCESS assert vx.ReleaseContext(c) == vx.SUCCESS
def test_user_kernel(self): c = vx.CreateContext() def func(node, parameters, num): func.called = True assert num == 2 input, output = vx.from_reference(parameters[0]), vx.from_reference(parameters[0]) _, r = vx.GetValidRegionImage(input) _, addr, indata = vx.AccessImagePatch(input, r, 0, None, None, vx.READ_ONLY) _, addr, outdata = vx.AccessImagePatch(output, r, 0, None, None, vx.WRITE_ONLY) outdata[0], outdata[100] = indata[100], indata[0] vx.CommitImagePatch(output, r, 0, addr, outdata) vx.CommitImagePatch(input, r, 0, addr, indata) return vx.SUCCESS def validate_input(node, index): validate_input.called = True assert index == 0 param = vx.GetParameterByIndex(node, index) image = vx.QueryParameter(param, vx.PARAMETER_ATTRIBUTE_REF, 'vx_image')[1] if vx.QueryImage(image, vx.IMAGE_ATTRIBUTE_FORMAT, 'vx_df_image') == (vx.SUCCESS, vx.DF_IMAGE_U8): s = vx.SUCCESS else: s = vx.ERROR_INVALID_VALUE vx.ReleaseImage(image) vx.ReleaseParameter(param) return s def validate_output(node, index, meta): validate_output.called = True assert index == 1 param0 = vx.GetParameterByIndex(node, 0) input = vx.QueryParameter(param0, vx.PARAMETER_ATTRIBUTE_REF, 'vx_image')[1] param1 = vx.GetParameterByIndex(node, index) output = vx.QueryParameter(param1, vx.PARAMETER_ATTRIBUTE_REF, 'vx_image')[1] _, width = vx.QueryImage(input, vx.IMAGE_ATTRIBUTE_WIDTH, 'vx_uint32') _, height = vx.QueryImage(input, vx.IMAGE_ATTRIBUTE_HEIGHT, 'vx_uint32') vx.SetMetaFormatAttribute(meta, vx.IMAGE_ATTRIBUTE_WIDTH, width, 'vx_uint32') vx.SetMetaFormatAttribute(meta, vx.IMAGE_ATTRIBUTE_HEIGHT, height, 'vx_uint32') vx.SetMetaFormatAttribute(meta, vx.IMAGE_ATTRIBUTE_FORMAT, vx.DF_IMAGE_U8, 'vx_df_image') vx.ReleaseImage(input) vx.ReleaseImage(output) vx.ReleaseParameter(param0) vx.ReleaseParameter(param1) return vx.SUCCESS enum = vx.KERNEL_BASE(vx.ID_DEFAULT, 7) + 1 kernel = vx.AddKernel(c, b"org.test.hello", enum, func, 2, validate_input, validate_output, None, None) assert vx.GetStatus(vx.reference(kernel)) == vx.SUCCESS assert vx.AddParameterToKernel(kernel, 0, vx.INPUT, vx.TYPE_IMAGE, vx.PARAMETER_STATE_REQUIRED) == vx.SUCCESS assert vx.AddParameterToKernel(kernel, 1, vx.OUTPUT, vx.TYPE_IMAGE, vx.PARAMETER_STATE_REQUIRED) == vx.SUCCESS assert vx.SetKernelAttribute(kernel, vx.KERNEL_ATTRIBUTE_LOCAL_DATA_SIZE, 42, 'vx_size') == vx.SUCCESS assert vx.FinalizeKernel(kernel) == vx.SUCCESS g = vx.CreateGraph(c) img = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_U8) _, r = vx.GetValidRegionImage(img) assert r.start_x == 0 assert r.end_x == 640 _, addr, data = vx.AccessImagePatch(img, r, 0, None, None, vx.WRITE_ONLY) data[0], data[100] = b'H', b'I' assert vx.CommitImagePatch(img, r, 0, addr, data) == vx.SUCCESS virt = vx.CreateVirtualImage(g, 0, 0, vx.DF_IMAGE_VIRT) # virt = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_U8) node = vx.CreateGenericNode(g, kernel) vx.SetParameterByIndex(node, 0, vx.reference(img)) vx.SetParameterByIndex(node, 1, vx.reference(virt)) assert vx.VerifyGraph(g) == vx.SUCCESS assert validate_input.called assert validate_output.called assert vx.QueryImage(virt, vx.IMAGE_ATTRIBUTE_WIDTH, 'vx_uint32') == (vx.SUCCESS, 640) assert vx.QueryImage(virt, vx.IMAGE_ATTRIBUTE_HEIGHT, 'vx_uint32') == (vx.SUCCESS, 480) assert vx.ProcessGraph(g) == vx.SUCCESS assert func.called == True _, addr, data = vx.AccessImagePatch(virt, r, 0, None, None, vx.READ_ONLY) assert data[0], data[100] == 'IH' vx.CommitImagePatch(virt, r, 0, addr, data) img2 = vx.CreateImage(c, 640, 480, vx.DF_IMAGE_U16) vx.SetParameterByIndex(node, 0, vx.reference(img2)) assert vx.VerifyGraph(g) == vx.ERROR_INVALID_VALUE enum = vx.KERNEL_BASE(vx.ID_DEFAULT, 7) + 2 kernel = vx.AddKernel(c, b"org.test.hello2", enum, func, 2, validate_input, validate_output, None, None) assert vx.RemoveKernel(kernel) == vx.SUCCESS assert vx.ReleaseGraph(g) == vx.SUCCESS assert vx.ReleaseContext(c) == vx.SUCCESS
from pyvx import vx context = vx.CreateContext() images = [ vx.CreateImage(context, 640, 480, vx.DF_IMAGE_UYVY), vx.CreateImage(context, 640, 480, vx.DF_IMAGE_S16), vx.CreateImage(context, 640, 480, vx.DF_IMAGE_U8), ] graph = vx.CreateGraph(context) virts = [ vx.CreateVirtualImage(graph, 0, 0, vx.DF_IMAGE_VIRT), vx.CreateVirtualImage(graph, 0, 0, vx.DF_IMAGE_VIRT), vx.CreateVirtualImage(graph, 0, 0, vx.DF_IMAGE_VIRT), vx.CreateVirtualImage(graph, 0, 0, vx.DF_IMAGE_VIRT), ] vx.ChannelExtractNode(graph, images[0], vx.CHANNEL_Y, virts[0]) vx.Gaussian3x3Node(graph, virts[0], virts[1]) vx.Sobel3x3Node(graph, virts[1], virts[2], virts[3]) vx.MagnitudeNode(graph, virts[2], virts[3], images[1]) vx.PhaseNode(graph, virts[2], virts[3], images[2]) status = vx.VerifyGraph(graph) if status == vx.SUCCESS: status = vx.ProcessGraph(graph) else: print("Verification failed.") vx.ReleaseContext(context)