Python3 PIL Ошибка при создании изображения: невозможно идентифицировать файл изображения

код

from io import StringIO
import subprocess
import os
import time
from datetime import datetime
from PIL import Image
import subprocess


def captureTestImage(settings, width, height):
    command = "libcamera-still --width {} --height {} --autofocus-on-capture 1 -q 75 --tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx708_wide.json -o DAY-AF1-q75--tuningfile-imx708_wide-06-21-2024-16-15-20.jpg".format(width, height)
    subprocess.run(command[0],shell=True,executable = "/usr/bin/bash")
    imageData = StringIO()
    imageData.write(subprocess.check_output(command, shell=True))
    imageData.seek(0)
    im = Image.open(imageData)
    buffer = im.load()
    imageData.close()
    return im, buffer

фактическая ошибка получения:

Still capture image received

    im = Image.open(imageData)
  File "/home/user/.local/lib/python3.9/site-packages/PIL/Image.py", line 3339, in open
    raise UnidentifiedImageError(msg)
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f9df4db80>

Что здесь не так?

Это создает настоящий файл изображения, но сценарий возвращает эту ошибку. Почему? Как я могу исправить? Спасибо

Что в imageData[:20]?

Mark Setchell 22.06.2024 22:26

когда я пытаюсь его распечатать, я получаю TypeError: '_io.BytesIO' object is not subscriptable

Jshee 23.06.2024 00:37

Вероятно, я смогу помочь вам лучше, если вы превратите свой вопрос в правильный минимально воспроизводимый пример. На данный момент есть только не вызываемая функция, никаких операторов import и переменная command, содержимое которой неизвестно.

Mark Setchell 23.06.2024 10:33

@MarkSetchell - я включил выше свой полный код, ошибки и импорт. Спасибо

Jshee 23.06.2024 11:25

Какой смысл бежать subprocess.run('l',shell=True,executable = "/usr/bin/bash"), пожалуйста?

Mark Setchell 23.06.2024 12:25

@MarkSetchell - это на самом деле работает command и генерирует файл изображения

Jshee 23.06.2024 12:31
command[0] будет равно l, верно?
Mark Setchell 23.06.2024 12:36

И ещё... почему ты вообще пытаешься запустить libcamera-still дважды? Что вы на самом деле пытаетесь сделать?

Mark Setchell 23.06.2024 13:32

@MarkSetchell - Просто пытаюсь создать тестовое неподвижное изображение с помощью libcamera.

Jshee 23.06.2024 15:16

Вы звоните subprocess.run() и subprocess.check_output(). Это означает, что вы запускаете ДВА процесса. Почему?

Mark Setchell 23.06.2024 15:21

Ваша команда создает файл изображения на диске. Почему вы пытаетесь прочитать несуществующий вывод из libcamera stdout и поместить его в StringIO, когда вывод представляет собой файл на диске? Почему бы вам просто не открыть файл на диске?

Mark Setchell 23.06.2024 15:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
11
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не понимаю, почему вы все так усложняете. Я думаю, что приведенного ниже кода должно быть достаточно для того, что вы пытаетесь сделать. Если нет, скажите, какой функциональности ему не хватает, чтобы я мог лучше помочь:

#!/usr/bin/env python3

import subprocess as sp

# Define parameters for libcamera command
width, height = 640, 480
filename = 'image.jpg'

# Flesh out libcamera command
cmd = [
   '/usr/bin/libcamera-still',
   '--width', f'{width}',
   '--height', f'{height}',
   '--autofocus-on-capture', '1',
   '-q', '75',
   '--tuning-file', '/usr/share/libcamera/ipa/rpi/vc4/imx708_wide.json',
   '-o', filename
   ] 

# Run libcamera command to create image.jpg
sp.run(cmd)

# Open image.jpg with Pillow
im = Image.open(filename)

Ценю это, Марк, и очень ценю твое терпение, пока я возвращаюсь к Python.

Jshee 23.06.2024 21:13

Нет проблем. Я надеюсь, что это сработает для вас.

Mark Setchell 23.06.2024 22:28

Другие вопросы по теме