首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >recognize_ndarray OpenALPR中的分段故障

recognize_ndarray OpenALPR中的分段故障
EN

Stack Overflow用户
提问于 2019-05-12 03:59:41
回答 1查看 331关注 0票数 3

我正在尝试使用带IP摄像头的openalpr + python来检测车牌,但我得到了以下错误:

openalpr版本是开源的。

我在recognize_file函数之前已经尝试过了,不太成功

代码语言:javascript
复制
Fatal Python error: Segmentation fault

Current thread 0x00007fa8c2fee740 <python> (most recent call first):
  File "/usr/lib/python2.7/dist-packages/openalpr/openalpr.py", line 184 in recognize_ndarray
  File "main9.py", line 45 in main
  File "main9.py", line 59 in <module>

代码如下:

代码语言:javascript
复制
import numpy as np
import cv2
from openalpr import Alpr
import sys
import faulthandler; faulthandler.enable()


RTSP_SOURCE  = 'rtsp://user:pass@ip:port/cam/realmonitor?channel=1&subtype=0'
WINDOW_NAME  = 'openalpr'
FRAME_SKIP   = 15

def main():
    alpr= Alpr("us", "/etc/openalpr/openalpr.conf", "/home/alan/openalpr/runtime_data")
    if not alpr.is_loaded():
        print('Error loading OpenALPR')
        sys.exit(1)
    alpr.set_top_n(3)
    alpr.set_default_region('pa')

    cap = cv2.VideoCapture(RTSP_SOURCE)
    cv2.namedWindow('op', cv2.WINDOW_NORMAL)
    if not cap.isOpened():
        alpr.unload()
        sys.exit('Failed to open video file!')
    cv2.namedWindow(WINDOW_NAME, cv2.WINDOW_AUTOSIZE)
    cv2.setWindowTitle(WINDOW_NAME, 'OpenALPR video test')

    _frame_number = 0
    while True:
        ret_val, frame = cap.read()
        if not ret_val:
            print('VidepCapture.read() failed. Exiting...')
            break

        _frame_number += 1
        if _frame_number % FRAME_SKIP != 0:
            continue
        cv2.imshow(WINDOW_NAME, frame)

        results = alpr.recognize_ndarray(frame)
        for i, plate in enumerate(results['results']):
            best_candidate = plate['candidates'][0]
            print('Plate #{}: {:7s} ({:.2f}%)'.format(i, best_candidate['plate'].upper(), best_candidate['confidence']))

        if cv2.waitKey(1) == 27:
            break

    cv2.destroyAllWindows()
    cap.release()
    alpr.unload()


if __name__ == "__main__":
    main()

以前有没有人遇到过这个错误?

EN

回答 1

Stack Overflow用户

发布于 2020-10-16 00:47:09

我知道这是一个非常古老的帖子,但我目前正在做一个非常类似的项目,并遇到了这个非常相同的问题。通过对代码进行实验,我发现如果在函数中包含以下代码行,python将抛出分段错误:

代码语言:javascript
复制
alpr =Alpr("eu","/etc/openalpr/openalpr.conf","/usr/share/openalpr/runtime_data")
alpr.unload()

不过,幸运的是,您只需在python脚本中运行这些行一次,即可使用openalpr,因此,在调用函数之前,只需在代码的开头运行第一行,在使用完函数之后,才运行第二行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56093820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档