Это 29-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
Программно-аппаратная среда
- Intel(R) Xeon(R) CPU E5-1607 v4 @ 3.10GHz
- GTX 1070 Ti 32G
- ubuntu 18.04 64bit
- anaconda with python 3.6
- tensorflow-gpu
- keras
- opencv 3.4.3
Введение в HyperLPR
HyperLPR
Это высокопроизводительный проект с открытым исходным кодом для распознавания китайских номерных знаков, основанный на глубоком обучении.GitHub.com/Zeus ee is/h audio…,Зависит отpython
язык, а также поддерживаетLinux
,Android
,iOS
,Windows
и другие основные платформы. Он имеет хорошую скорость распознавания, и в настоящее время поддерживаемые типы номерных знаков включают
- синяя карта в один ряд
- Желтая карточка в один ряд
- Новый энергетический номерной знак
- белый полицейский номерной знак
- Номерной знак посольства/Гонконга и Макао
- Номерной знак автобуса
Процесс обнаружения HyperLPR
- использовать
opencv
изHAAR Cascade
Определить приблизительное местоположение номерного знака -
Extend
Прямоугольная область обнаруженного примерного местоположения - использовать что-то вроде
MSER
многоуровневая бинаризация в видеRANSAC
Установите верхнюю и нижнюю границы номерного знака - использовать
CNN Regression
Возврат к левой и правой границам номерного знака - Коррекция наклона номерного знака с использованием алгоритма на основе текстурного поля
- использовать
CNN
Символы вырезания скользящего окна - использовать
CNN
Определить символы
Установка HyperLPR
git clone https://github.com/zeusees/HyperLPR.git
cd HyperLPR
поддержка проектаpython2
иpython3
, но есть отличия в структуре каталогов,hyperlpr
иheperlpr_py3
, мое окружениеpython3
иanaconda
, напрямуюhyperlpr_py3
скопировать папку в~/anaconda3/lib/python3.6/site-packages/
просто хорошо
Тестовый эффект
рисунок
from hyperlpr_py3 import pipline as pp
import cv2
import click
@click.command()
@click.option('--image', help = 'input image')
def main(image):
img = cv2.imread(image)
img,res = pp.SimpleRecognizePlateByE2E(img)
print(res)
if __name__ == '__main__':
main()
Для тестирования используйте тестовое изображение, которое идет в комплекте с проектом.Из-за угла съемки некоторые результаты распознавания неверны.
longjing@FR:~/Work/gogs/LPR$ python test_image.py --image demo_images/demo1.png
Using TensorFlow backend.
2018-12-18 15:28:27.628782: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-12-18 15:28:27.765931: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties:
name: GeForce GTX 1070 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.683
pciBusID: 0000:03:00.0
totalMemory: 7.93GiB freeMemory: 7.15GiB
2018-12-18 15:28:27.765967: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0
2018-12-18 15:28:28.030061: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-12-18 15:28:28.030097: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0
2018-12-18 15:28:28.030105: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0: N
2018-12-18 15:28:28.030306: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6899 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070 Ti, pci bus id: 0000:03:00.0, compute capability: 6.1)
res 闽R6G81
川01C 0.6178697198629379
res 1035
吉晋K03 0.5994847059249878
res K032301
K030X 0.824301564693451
res JK0330
贵晋JK0330 0.9602108970284462
res 闽CR8W
CRM1 0.6328456625342369
res 1NX888
云A赣X881 0.5053929431097848
res 桂ANX889
桂ANX889 0.984427673476083
res 贵JD1687
贵JD1687 0.9756925020899091
res 贵JC3732
贵JC3732 0.8844872457640511
res 1T687
L87 0.6002845267454783
[[[], '川01C', 0.6178697198629379], [[], '吉晋K03', 0.5994847059249878], [[], 'K030X', 0.824301564693451], [[], '贵晋JK0330', 0.9602108970284462], [[], 'CRM1', 0.6328456625342369], [[], '云A赣X881', 0.5053929431097848], [[], '桂ANX889', 0.984427673476083], [[], '贵JD1687', 0.9756925020899091], [[], '贵JC3732', 0.8844872457640511], [[], 'L87', 0.6002845267454783]
видео файл
По сути, как на картинке, мы все еще используемopencv
Интерфейс
# -*- coding: utf-8 -*-
# @time : 18-12-18 下午3:05
# @author : xugaoxiang
# @email : xugx.ai@gmail.com
# @website : https://xugaoxiang.com
# @file : test_video_file.py
# @software: PyCharm
# python test_video_file.py --video test.mp4
import time
import cv2
from hyperlpr_py3 import pipline as pp
import click
@click.command()
@click.option('--video', help = 'input video file')
def main(video):
print("[INFO] starting video stream...")
# vs = VideoStream(src=0).start()
stream = cv2.VideoCapture(video)
time.sleep(2.0)
while True:
# grab the frame from the threaded video stream
grabbed, frame = stream.read()
if not grabbed:
print('No data, break.')
break
_, res = pp.SimpleRecognizePlate(frame)
# convert the input frame from BGR to RGB then resize it to have
# a width of 750px (to speedup processing)
# rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# rgb = imutils.resize(frame, width = 750)
# r = frame.shape[1] / float(rgb.shape[1])
cv2.putText(frame, str(res), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 255), 2)
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF
# if the `q` key was pressed, break from the loop
if key == ord("q"):
break
# do a bit of cleanup
cv2.destroyAllWindows()
stream.release()
if __name__ == '__main__':
main()
Программа запускается и печатает следующим образом, скорость распознавания все еще в порядке, но поскольку само распознавание и обнаружение требует много времени, поэтому с экрана это похоже на медленное воспроизведение.Здесь приложение верхнего уровня должно выполнять пропуск кадров обработка в соответствии со своими потребностями.
longjing@FR:~/Work/gogs/LPR$ python test_video_file.py --video ~/backup/lpr/2s_lpr.mp4
Using TensorFlow backend.
2018-12-18 16:00:17.067081: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-12-18 16:00:17.203116: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties:
name: GeForce GTX 1070 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.683
pciBusID: 0000:03:00.0
totalMemory: 7.93GiB freeMemory: 7.12GiB
2018-12-18 16:00:17.203152: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0
2018-12-18 16:00:17.471942: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-12-18 16:00:17.471983: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0
2018-12-18 16:00:17.471991: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0: N
2018-12-18 16:00:17.472190: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6875 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070 Ti, pci bus id: 0000:03:00.0, compute capability: 6.1)
[INFO] starting video stream...
车牌: 沪B28600 相似度: 0.9864972574370248
车牌: 沪B28600 相似度: 0.9910101975713458
车牌: 沪B28600 相似度: 0.9908801657812936
车牌: 沪B28600 相似度: 0.9916305116244725
...
...
...
IPC
Аналогично видеофайлу, непосредственно в коде
# -*- coding: utf-8 -*-
# @time : 18-12-18 下午3:05
# @author : xugaoxiang
# @email : xugx.ai@gmail.com
# @website : https://xugaoxiang.com
# @file : test_ipc.py
# @software: PyCharm
# python test_ipc.py --video rtsp://admin:lj12345678@192.168.2.130:554/ISAPI/streaming/channels/101
from imutils.video import VideoStream
import time
import cv2
from hyperlpr_py3 import pipline as pp
import click
@click.command()
@click.option('--video', help = 'input video, ipcamera url or usb camera index.')
def main(video):
print("[INFO] starting video stream...")
# vs = VideoStream(src=0).start()
vs = VideoStream(video).start()
time.sleep(2.0)
while True :
# grab the frame from the threaded video stream
frame = vs.read()
img, res = pp.SimpleRecognizePlate(frame)
print(res)
# convert the input frame from BGR to RGB then resize it to have
# a width of 750px (to speedup processing)
# rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# rgb = imutils.resize(frame, width = 750)
# r = frame.shape[1] / float(rgb.shape[1])
cv2.putText(frame, str(res), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 255), 2)
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF
# if the `q` key was pressed, break from the loop
if key == ord("q") :
break
# do a bit of cleanup
cv2.destroyAllWindows()
vs.stop()
if __name__ == '__main__':
main()
Графический инструмент проверки
На основе оригинального фреймворка разработчики-энтузиасты используютQt
У него красивый корпус для тех, кто не привык пользоваться командной строкой, очень хорош
Q & A
Q1
module 'tensorflow.python.training.checkpointable' has no attribute 'CheckpointableBase'
или
longjing@FR:~/Work/gogs/LPR$ python test_video_file.py
Using TensorFlow backend.
Traceback (most recent call last):
File "test_video_file.py", line 12, in <module>
from hyperlpr_py3 import pipline as pp
File "/home/longjing/Work/gogs/LPR/hyperlpr_py3/pipline.py", line 5, in <module>
from . import segmentation
File "/home/longjing/Work/gogs/LPR/hyperlpr_py3/segmentation.py", line 16, in <module>
from keras.models import Sequential
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/__init__.py", line 3, in <module>
from . import utils
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/utils/__init__.py", line 6, in <module>
from . import conv_utils
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/utils/conv_utils.py", line 9, in <module>
from .. import backend as K
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/backend/__init__.py", line 89, in <module>
from .tensorflow_backend import *
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 6, in <module>
from tensorflow.python.framework import ops as tf_ops
ModuleNotFoundError: No module named 'tensorflow.python.framework'
A1
переустановитьtensorflow-gpu
. если нетGPU
просто установитеCPU
версия
pip install --upgrade tensorflow-gpu
Q2
установленtensorflow-gpu
, при запуске сообщает, что модуль отсутствует
longjing@FR:~/Work/github/HyperLPR$ python demo_py3.py
Using TensorFlow backend.
Traceback (most recent call last):
File "demo_py3.py", line 41, in <module>
import HyperLPRLite as pr
File "/home/longjing/Work/github/HyperLPR/HyperLPRLite.py", line 4, in <module>
from keras import backend as K
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/__init__.py", line 3, in <module>
from . import utils
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/utils/__init__.py", line 6, in <module>
from . import conv_utils
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/utils/conv_utils.py", line 9, in <module>
from .. import backend as K
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/backend/__init__.py", line 89, in <module>
from .tensorflow_backend import *
File "/home/longjing/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 5, in <module>
import tensorflow as tf
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/__init__.py", line 24, in <module>
from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/__init__.py", line 88, in <module>
from tensorflow.python import keras
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/__init__.py", line 24, in <module>
from tensorflow.python.keras import activations
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/activations/__init__.py", line 22, in <module>
from tensorflow.python.keras._impl.keras.activations import elu
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/__init__.py", line 21, in <module>
from tensorflow.python.keras._impl.keras import activations
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/activations.py", line 23, in <module>
from tensorflow.python.keras._impl.keras import backend as K
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/backend.py", line 37, in <module>
from tensorflow.python.layers import base as tf_base_layers
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/layers/base.py", line 25, in <module>
from tensorflow.python.keras.engine import base_layer
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/__init__.py", line 23, in <module>
from tensorflow.python.keras.engine.base_layer import InputSpec
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 35, in <module>
from tensorflow.python.keras import backend
File "/home/longjing/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/backend/__init__.py", line 22, in <module>
from tensorflow.python.keras._impl.keras.backend import abs
ImportError: cannot import name 'abs'
A2
удалитьtensorflow-gpu
иprotobuf
, затем переустановитеtensorflow-gpu
, при установкеtensorflow-gpu
в процессеpip
автоматически установит его для васprotobuf
pip uninstall tensorflow-gpu
pip uninstall protobuf
pip install --upgrade tensorflow-gpu