class ImageIO -- Đối tượng ImageIO¶
Lớp ImageIO ghi và phát lại các luồng khung hình Image theo định dạng lưu trữ gốc của OpenMV. Một luồng có thể chứa các khung hình không đồng nhất (định dạng điểm ảnh / kích thước khác nhau) và ghi lại khoảng thời gian giữa các khung hình để phát lại tái tạo tốc độ khung hình gốc.
Có hai loại bộ lưu trữ:
Luồng file -- các khung hình được đọc từ / ghi thêm vào một file trên hệ thống tập tin. File bắt đầu với tiêu đề ma thuật 16 byte
OMV IMG STR Vx.ytheo sau là các khối dữ liệu theo từng khung hình. Phiên bản ghi hiện tại tạo raV2.0; các file cũV1.0vàV1.1vẫn có thể đọc được.Luồng bộ nhớ -- các khung hình được đọc từ / ghi vào một bộ đệm RAM có kích thước cố định được cấp phát tại thời điểm khởi tạo. Hữu ích để xử lý các khung hình qua các bộ lọc cần ghi lại mà không cần truy cập hệ thống tập tin.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Tạo một luồng
ImageIO.Nếu
pathlà một chuỗi ký tự, một luồng file được mở tại đường dẫn đó.modephải là một trong các giá trị sau:Nếu
pathlà một 3-tuple(w, h, pixformat), một luồng bộ nhớ được cấp phát.modekhi đó là số nguyên số lượng slot khung hình cần cấp phát trước. Bộ đệm được định kích thước chocountkhung hình theo(w, h, pixformat)và không được phép mở rộng sau khi tạo.pixformatlà một trong các giá trị:image.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEG, hoặcimage.PNG. Đối với các định dạng nén (image.JPEG,image.PNG), kích thước mỗi slot được ước tính là 2 bpp; các khung hình lớn hơn mức ước tính sẽ gây raValueErrorkhi gọiwrite().Kiểm tra¶
- type() int¶
Trả về loại bộ lưu trữ của luồng:
FILE_STREAMcho luồng file,MEMORY_STREAMcho luồng bộ nhớ.
- is_closed() bool¶
Trả về
Truenếuclose()đã được gọi trên đối tượng này. Sau khi đóng, luồng sẽ gây raOSError("Stream closed")khi thực hiện bất kỳ thao tác đọc/ghi/tìm kiếm nào tiếp theo.
- count() int¶
Trả về số lượng khung hình hiện được lưu trữ trong luồng. Đối với luồng file, con số này tăng khi
write()ghi thêm khung hình; đối với luồng bộ nhớ, giá trị này cố định từ thời điểm khởi tạo.
- offset() int¶
Trả về chỉ mục khung hình hiện tại. Được tăng lên bởi
read()vàwrite(), được đặt lại bởiseek().
- version() int | None¶
Trả về phiên bản định dạng lưu trữ cho luồng file (
10choV1.0,11choV1.1,20choV2.0). Trả vềNonecho luồng bộ nhớ.
I/O¶
- write(img: Image) ImageIO¶
Ghi thêm (luồng file) hoặc lưu tại vị trí offset (luồng bộ nhớ)
imgvà tăngoffset()lên một.Đối với luồng file, file sẽ tăng kích thước khi ghi thêm khung hình. Ghi tại vị trí không phải cuối file sẽ cắt bỏ phần còn lại nên số lượng có thể giảm.
Đối với luồng bộ nhớ, khung hình được ghi vào slot hiện tại; ghi vượt quá slot cuối cùng sẽ gây ra
EOFError("End of stream")và ghi một khung hình lớn hơnbuffer_size()sẽ gây raValueError("Invalid frame size").Trả về
selfđể có thể gọi nối tiếp.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Đọc khung hình tại
offset()hiện tại, tăng offset, và trả vềImagemới. Tương ứng với nửa phát lại củawrite().copy_to_fb-- khiTrue(mặc định) khung hình đã giải mã được đặt vào bộ đệm khung hình camera (cùng vị trí màcsi.CSI.snapshot()lưu kết quả), giúpImagetrả về có thể hiển thị qua giao diện xem trước của IDE. KhiFalsekhung hình được cấp phát trên heap MicroPython.loop(chỉ dành cho luồng file) -- khiTrue(mặc định) việc đọc vượt quá khung hình cuối sẽ quay lại khung hình đầu tiên và tiếp tục. KhiFalselệnh gọi trả vềNonekhi đến cuối file.pause-- khiTrue(mặc định) lệnh gọi sẽ chặn cho đến khi khoảng thời gian giữa các khung hình đã ghi gốc đã trôi qua, để phát lại ở tốc độ khung hình gốc. Đặt thànhFalseđể phát lại nhanh nhất có thể.
- seek(offset: int) ImageIO¶
Di chuyển
offset()đến khung hìnhoffset.offsetphải không âm; offset của luồng bộ nhớ cũng phải nhỏ hơncount().Tìm kiếm trong luồng file sẽ duyệt file theo từng khung hình từ đầu vì các khối khung hình có kích thước biến đổi -- dự kiến thời gian O(offset) cho các bước nhảy lớn.
Trả về
selfđể có thể gọi nối tiếp.
- sync() ImageIO¶
Xả các thao tác ghi đang chờ xử lý ra đĩa cho luồng file (gọi
synccủa hệ thống tập tin bên dưới). Không có tác dụng với luồng bộ nhớ.Trả về
selfđể có thể gọi nối tiếp.
- close() None¶
Đóng luồng. Giải phóng bộ đệm bộ nhớ (luồng bộ nhớ) hoặc đóng file (luồng file). Sau
close()đối tượngImageIOkhông thể sử dụng lại; các thao tác tiếp theo sẽ gây raOSError("Stream closed"). Gọiclose()hai lần không có tác dụng.Một
ImageIOcũng được đóng tự động khi nó bị thu gom rác (nó đăng ký một hàm hoàn tất tại thời điểm khởi tạo).
Hằng số¶