Вопрос или проблема
У меня возникла проблема. У меня есть проект, в котором я должен использовать распознавание лиц от insightface для обнаружения известных людей. По аппаратной части мне предоставили Raspberry Pi 5 и две камеры picam (v1.3, v2.1). Я выяснил, что есть проблема с тем, что система не распознает picam 2 на pi5, поэтому я использую версию 1.3. Тем не менее, я сталкиваюсь с постоянной ошибкой AttributeError: module ‘kms’ has no attribute ‘PixelFormat’.
Чтобы устранить это, я переустановил библиотеку picam2, проверил, что у меня нет конфликтующих версий, пытался запускать без предварительного просмотра. Независимо от того, что я пробую, ошибка возникает.
import cv2
from picamera2 import Picamera2
import numpy as np
import pickle
from insightface.app import *
import Custom_Buzzer
from gpiozero import Device
from gpiozero.pins.lgpio import LGPIOFactory
Device.pin_factory = LGPIOFactory()
picam2 = Picamera2(preview=None)
picam2.configure(picam2.create_still_configuration(main={"format": "RGB888", "size": (640, 480)}))
picam2.start()
# Загрузка векторов известных лиц
with open("known_faces.pkl", "rb") as f:
known_face_encodings, known_face_names = pickle.load(f)
# Инициализация приложения FaceAnalysis
app = FaceAnalysis()
app.prepare(ctx_id=-1, det_size=(640, 640))
buzzer = Custom_Buzzer.create_buzzer(16)
while True:
# Захват кадра за кадром
frame = picam2.capture_array()
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# Выполнение обнаружения лиц
faces = app.get(rgb_frame)
for face in faces:
# Вычисление вектора лица
face_embedding = face.normed_embedding
# Сравнение с известными лицами
distances = np.linalg.norm(np.array(known_face_encodings) - face_embedding, axis=1)
min_distance_index = np.argmin(distances)
min_distance = distances[min_distance_index]
# Установка порога для расстояния, чтобы считать это совпадением
threshold = 1.0
if min_distance < threshold:
name = known_face_names[min_distance_index]
Custom_Buzzer.initialize_buzzer(buzzer, 2)
else:
name = "Unknown"
Custom_Buzzer.initialize_buzzer(buzzer, 5)
Ошибка AttributeError: module 'kms' has no attribute 'PixelFormat', с которой вы сталкиваетесь, обычно указывает на проблему с библиотекой Picamera2 или тем, как она взаимодействует с камерой вашего Raspberry Pi. Это особенно актуально, поскольку вы используете Raspberry Pi 5, который может иметь специфические требования или проблемы совместимости. При работе с модулями камер на Raspberry Pi они полагаются на библиотеку libcamera для управления захватом и обработкой изображений. Библиотека Picamera2 построена на этой базе, и любые несоответствия между версиями этих библиотек могут привести к такой ошибке, с которой вы столкнулись. В основном, если установленная вами библиотека ищет функцию, которой нет в версии libcamera на вашей системе, вы столкнетесь с проблемами. Другой аспект, который стоит учесть, это то, как вы настроили камеру в вашем коде. В вашей конфигурации вы задаете формат пикселей и размер при создании конфигурации камеры. Если эти настройки не соответствуют тому, что поддерживает ваша камера, это может вызвать проблемы. Например, если вы пытаетесь использовать формат пикселей, который камера не распознает, это приведет к ошибке атрибута. Также стоит отметить, что поддержание вашего Raspberry Pi в актуальном состоянии может помочь избежать подобных проблем. Операционная система и использующиеся библиотеки часто обновляются, и эти обновления могут включать исправления для проблем совместимости с аппаратным обеспечением. Если ваша ОС устарела, это может привести к конфликтам с новыми аппаратными средствами или библиотеками. Наконец, полезно обратиться к более широкой общественности. Другие, вероятно, сталкивались с аналогичными проблемами, и проверка форумов или платформ, таких как GitHub, может предоставить идеи или исправления, которые вы могли бы не найти в официальной документации. Иногда лучшие решения исходят из реального опыта других пользователей, занимающихся той же технологией. Так что, вкратце, эта ошибка, вероятно, вызвана несоответствием версий или неправильной конфигурацией, связанной с настройкой вашей камеры и вовлеченными библиотеками. Поддержание всего в актуальном состоянии и проверка ресурсов сообщества могут быть ключом к решению таких проблем.
Ответ или решение
Ошибка, с которой вы столкнулись, AttributeError: module 'kms' has no attribute 'PixelFormat'
, говорит о том, что происходит конфликт либо несоответствие между библиотекой Picamera2
и установленными компонентами фреймворка libcamera
на вашем Raspberry Pi 5. Давайте рассмотрим шаги, которые можно предпринять для диагностики и решения этой проблемы.
Причины возникновения ошибки
-
Несоответствие версий: Библиотека
Picamera2
зависит отlibcamera
, и если версии этих библиотек несовместимы, это может приводить к ошибкам. Убедитесь, что у вас установлены актуальные версии обеих библиотек. Команда для проверки установленных пакетов:pip list | grep picamera2
-
Неправильная конфигурация камеры: Возможно, вы пытаетесь использовать формат пикселей, который не поддерживается вашей камерой. В данном случае камера v1.3 и v2.1 имеют свои характеристики, и иногда поддерживаемые форматы могут различаться. Ваша строка конфигурации:
picam2.configure(picam2.create_still_configuration(main={"format": "RGB888", "size": (640, 480)}))
Убедитесь, что данный формат действительно поддерживается вашей моделью камеры.
-
Обновление операционной системы: Как правило, обновление системы помогает избежать несовместимостей:
sudo apt update sudo apt upgrade sudo apt dist-upgrade
-
Проблемы с драйверами: Убедитесь, что драйвера камеры установлены правильно. Попробуйте выполнить следующую команду, чтобы проверить, правильно ли ваша система видит камеру:
libcamera-hello
Если команда выполняется успешно, камера подключена и работает.
Рекомендации по устранению ошибки
-
Переустановка библиотек:
Попробуйте удалить и заново установить библиотекуPicamera2
:pip uninstall picamera2 pip install picamera2
-
Использование других форматов: Если после проверки вы обнаружите, что
RGB888
не поддерживается вашей камерой, попробуйте использовать другие форматы, такие какBGR888
илиYUV420
. -
Просмотр документации: Ознакомьтесь с документацией Picamera2, там могут быть описаны специфические рекомендации по использованию с Raspberry Pi 5.
-
Обращение к сообществу: Если проблема сохраняется, имеет смысл обратиться за помощью в форумы сообщества Raspberry Pi или GitHub. Вероятно, другие пользователи столкнулись с аналогичными проблемами.
Заключение
Ошибка AttributeError: module 'kms' has no attribute 'PixelFormat'
может быть вызвана множеством факторов, включая несоответствие версий библиотек, неправильную конфигурацию камеры и устаревшие драйверы. Следует уделить особое внимание всем этим аспектам, чтобы успешно выполнить настройку пикардо и продолжить работу над проектом по распознаванию лиц. Успехов в решении вашей проблемы!