Aravis:在Python中获取块数据的问题

0 投票
0 回答
15 浏览
提问于 2025-04-12 05:02

我在使用Aravis项目的Python库时遇到了一些麻烦,想要获取数据块。

我的代码确认我已经启用了数据块功能,但当我从流中抓取一帧并尝试读取它的数据块内容时,似乎没有任何数据块。

不幸的是,我没有找到任何示例能展示我这个特定的用例,无论是在C语言还是Python中。因此,我一直在参考这个符号映射文档,试图将C语言的函数映射到Python中。

如果有人对这两种绑定有经验,能给我一些指导,我会非常感激。

import sys
import gi
gi.require_version ('Aravis', '0.8')
from gi.repository import Aravis

# Attempt to find the connected camera
try:
    camera = Aravis.Camera.new (None)
except TypeError:
    print ("No camera found")
    exit ()

# Configure the camera
camera.set_region (0,0,128,128)
camera.set_frame_rate (15.0)
camera.set_pixel_format (Aravis.PIXEL_FORMAT_MONO_8)

# Check if software trigger capture is supported by camera
if camera.is_software_trigger_supported():
    print("Software trigger available. Attempting to configure...")
    camera.set_trigger_source("Software")
    
    # Confirm
    trigger = camera.get_trigger_source()
    if trigger == "Software":
        print("Software trigger confirmed.")
    else:
        print("Software trigger failed. Trigger is: ",trigger )   
else:
    print("Software trigger unavailable.")

# Create chunk parser
chunk_parser = camera.create_chunk_parser()
  
# Enable chunk data: Timestamp  - Wes, you can add more chunk data here into the array "Timestamp,Mo-Data-You-Want,..."
if camera.are_chunks_available():
    camera.set_chunks("Timestamp")
    
    #Confirm
    if camera.get_chunk_mode():
        print("Chunk mode confirmed.")
        
        if camera.get_chunk_state("Timestamp"):
            print("Timestamp enabled.")
    else:
        print("Failed to confirm chunk mode.")
else:
    print("Chunk data not available for this camera")

# Print camera info
print ("Camera vendor : %s" %(camera.get_vendor_name ()))
print ("Camera model  : %s" %(camera.get_model_name ()))
print ("Frame rate  : %d" %(camera.get_frame_rate()))

stream = camera.create_stream (None, None)

# Create a pool of buffers for capture
payload = camera.get_payload ()
for i in range(0,5):
    stream.push_buffer(Aravis.Buffer.new_allocate (payload))

print ("Starting...")
camera.start_acquisition()

#Enter main loop to gather frame and chunk data and print data to screen
try:
    for i in range(0,5):
        # Get the buffer
        buffer = stream.pop_buffer()
        print(buffer)
        
        if buffer:
            # If the image has chunk data lets handle it. 
            if buffer.has_chunks():
                ts = chunk_parser.get_float_value(buffer, "Timestamp")
                print("Timestamp: ", ts)
            else:
                print("No chunk data.")
                
            stream.push_buffer (buffer)
        else:
            print("No buffer.")
            
except Exception as error:
    print(error)

finally:
    print ("Stopping.")
    camera.stop_acquisition ()

输出结果:

root@imx8qm:/test/bin# python3 arv-chunk-test.py
Software trigger available. Attempting to configure...
Software trigger confirmed.
Chunk mode confirmed.
Timestamp enabled.
Camera vendor : FLIR
Camera model  : Blackfly S BFS-U3-120S4C
Frame rate  : 15
Starting...
<Aravis.Buffer object at 0xffffa6499a00 (ArvBuffer at 0xaaaaf3205220)>
No chunk data.
<Aravis.Buffer object at 0xffffa6499ac0 (ArvBuffer at 0xaaaaf32052b0)>
No chunk data.
<Aravis.Buffer object at 0xffffa6499b00 (ArvBuffer at 0xaaaaf3205340)>
No chunk data.
<Aravis.Buffer object at 0xffffa6499b40 (ArvBuffer at 0xaaaaf32053d0)>
No chunk data.
<Aravis.Buffer object at 0xffffa6499b80 (ArvBuffer at 0xaaaaf3205460)>
No chunk data.
Stopping.

0 个回答

暂无回答

撰写回答