Мой код падает со следующей ошибкой:
TypeError: объект JSON должен быть str, а не 'tuple'
Я распечатал сообщение от ALPR и получил следующее:
(b'plate0: 10 результатов \ n - SBG984 \ t достоверность: 85.7017 \ n -
SBG98 \ t достоверность: 83.3453 \ n - S8G984 \ t достоверность: 78.3329 \ n -
5BG984 \ t достоверность: 76,6761 \ n - S8G98 \ t достоверность: 75,9766 \ n -
SDG984 \ t достоверность: 75,5532 \ n - 5BG98 \ t достоверность: 74,3198 \ n -
SG984 \ t достоверность: 73,3743 \ n - SDG98 \ t достоверность: 73.1969 \ n -
BG984 \ t достоверность: 71.7671 \ n ', нет)
Интересно, как заставить код прочитать это и разбить его? Я взял следующий код из другого примера, который нашел в Интернете, и он работает для них, поэтому я не уверен, что делаю неправильно. Я приложил свой код ниже.
# Setting up Pyrebase config below
config = {
}
camera = PiCamera()
global alpr_command_args
def Take_an_Image():
global alpr_command_args
camera.start_preview()
sleep(5)
camera.capture('picture.jpg')
camera.stop_preview()
#alpr subprocess args
alpr_command = "alpr -c gb pictureold.jpg"
alpr_command_args = shlex.split(alpr_command)
read_plate()
def alpr_subprocess():
global alpr_command_args
return subprocess.Popen(alpr_command_args, stdout=subprocess.PIPE)
def alpr_json_results():
alpr_out, alpr_error = alpr_subprocess().communicate()
if not alpr_error is None:
return None, alpr_error
elif b"No license plates found." in alpr_out:
return None, None
try:
return json.loads(alpr_out), None
except (ValueError) as e:
return None, e
def read_plate():
alpr_json, alpr_error = alpr_json_results()
if not alpr_error is None:
print (alpr_error)
return
if alpr_json is None:
print ("No results!")
return
results = alpr_json["results"]
print(results)
ordinal = 0
for result in results:
candidates = result["candidates"]
for candidate in candidates:
if candidate["matches_template"] == 1:
ordinal += 1
print ("PLATE " + candidate["plate"] + candidate["confidence"])
firebase = pyrebase.initialize_app(config)
db = firebase.database()
# Setting initial values to Firebase Database on startup
data = {
"CAMERA": "OFF",
}
# Setting default values on Pi
results = db.update(data)
# This is the handler when Firebase database changes
def stream_handler(message):
path = str(message["path"]) # This is what sensor changes, e.g path returns /LED
status = str(message["data"]) # This is what the sensor says, e.g /LED says "ON"
# Getting global values
if path =="/CAMERA":
if status == "ON":
print("**TAKE PIC**")
data = {
"CAMERA": "OFF",
}
results = db.update(data)
Take_an_Image();
# Starting stream for Firebase
my_stream = db.stream(stream_handler)
UPDATE:
При попытке использовать метод Дениса я получаю следующую ошибку:
Исключение в потоке Thread-1: трассировка (последний последний вызов):
Файл "/usr/lib/python3.5/threading.py", строка 914, в _bootstrap_inner
Файл self.run () "/usr/lib/python3.5/threading.py", строка 862, в работе
self._target (* self._args, ** self._kwargs) Файл "/home/pi/.local/lib/python3.5/site-packages/pyrebase/pyrebase.py",
строка 563, в start_stream
self.stream_handler (msg_data) Файл «camera.py», строка 96, в stream_handler
Take_an_Image (); Файл «camera.py», строка 29, в Take_an_Image
read_plate () Файл "camera.py", строка 50, в read_plate
alpr_json, alpr_error = alpr_json_results () Файл «camera.py», строка 36, в alpr_json_results
elif "Тарелки не найдены." в alpr_out: TypeError: требуется байтоподобный объект, не 'str'
ОБНОВЛЕНИЕ:
После исправления проблемы с байтами, добавив b перед "Не найдены номерные знаки". Теперь я получаю следующую ошибку:
Исключение в потоке Thread-1: трассировка (последний вызов был последним):
Файл "/usr/lib/python3.5/threading.py", строка 914, в _bootstrap_inner
Файл self.run () "/usr/lib/python3.5/threading.py", строка 862, в работе
self._target (* self._args, ** self._kwargs) Файл "/home/pi/.local/lib/python3.5/site-packages/pyrebase/pyrebase.py",
строка 563, в start_stream
self.stream_handler (msg_data) Файл «camera.py», строка 96, в stream_handler
Take_an_Image (); Файл «camera.py», строка 29, в Take_an_Image
read_plate () Файл "camera.py", строка 52, в read_plate
alpr_json, alpr_error = alpr_json_results () Файл «camera.py», строка 46, в alpr_json_results
вернуть json.loads (alpr_out), нет файла "/usr/lib/python3.5/json/init.py", строка 312, в загрузках
s. class . name )) TypeError: объект JSON должен быть str, а не 'bytes'