Project

General

Profile

RE: Python & GenTL (XML parser error) ยป snap.py

Viacheslav Mazlin, 09/19/2022 01:31 PM

 
1
# example python script for capturing an image from CMV50K EVK
2
# you must have c:\Program Files\Critical Link LLC\GenTL Viewer\bin
3
# in your path prior to running this script.
4
from harvesters.core import Harvester
5
import logging
6
import matplotlib.pyplot as plt
7

    
8
import os
9

    
10
os.environ['PATH'] = 'c:\\Program Files\\Critical Link LLC\\GenTL Viewer\\bin'
11

    
12
# os.environ['SIMCAM_XML_FILE'] = 'C:\\Program Files\\Critical Link LLC\\GenTL Viewer\\bin\\sim_camera.xml'
13
os.environ['HARVESTERS_XML_FILE_DIR'] = 'C:\\Users\\salhadda\\Documents\\XMLFOLDER\\'
14
print(os.getenv('HARVESTERS_XML_FILE_DIR'))
15

    
16
# set up a logger for the harvester library.
17
# this is not needed but can be useful for debugging your script
18
logger = logging.getLogger('harvesters');
19
ch = logging.StreamHandler()
20
logger.setLevel(logging.DEBUG)
21
ch.setLevel(logging.DEBUG)
22
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
23
ch.setFormatter(formatter)
24
logger.addHandler(ch)
25

    
26
# Create the harvester
27
h = Harvester(logger=logger)
28
# the harvester can load dlls as well as cti files.
29
if "add_file" in dir(h): # Use updated harvesters api if exists
30
	h.add_file('c:\\Program Files\\Critical Link LLC\\GenTL Viewer\\bin\\GenTL.dll')
31
else:
32
	h.add_cti_file('c:\\Program Files\\Critical Link LLC\\GenTL Viewer\\bin\\GenTL.dll')
33
if "update" in dir(h): # Use updated harvesters api if exists
34
	h.update()
35
else:
36
	h.update_device_info_list()
37

    
38
print("Found {} devices".format(len(h.device_info_list)))
39
print(h.device_info_list)
40

    
41
if len(h.device_info_list) == 0:
42
	print("No devices found")
43
	
44

    
45
# create an image acquirer
46
ia = h.create_image_acquirer(list_index=1)
47
# this is required for larger images (> 16 MiB) with Critical Link's producer.
48
ia.num_buffers = 4
49
ia.remote_device.node_map.PixelFormat.value = 'Mono8'
50
# Uncomment to set the image ROI width, height. Otherwise will get full frame
51
#ia.remote_device.node_map.Width.value, ia.remote_device.node_map.Height.value = 800, 600
52

    
53
print("Starting Acquistion")
54

    
55
ia.start_image_acquisition()
56

    
57
# just capture 1 frame
58
for i in range(1):
59
	with ia.fetch_buffer(timeout=4) as buffer:
60
		payload = buffer.payload
61
		component = payload.components[0]
62
		width = component.width
63
		height = component.height
64
		data_format = component.data_format
65
		print("Image details: {}w {}h {}".format(width, height, data_format))
66
		# for monochrome 8 bit images
67
		if int(component.num_components_per_pixel) == 1:
68
			content = component.data.reshape(height, width)
69
		else:
70
			content = component.data.reshape(height, width, int(component.num_components_per_pixel))
71
		if int(component.num_components_per_pixel) == 1:
72
			plt.imshow(content, cmap='gray')
73
		else:
74
			plt.imshow(content)
75
		plt.show()
76

    
77
#
78
ia.stop_image_acquisition()
79
ia.destroy()
    (1-1/1)
    Go to top
    Add picture from clipboard (Maximum size: 1 GB)