| | |
| | |
| | |
| | |
| | |
| |
|
| | import numpy as np |
| | import cv2 as cv |
| |
|
| | class PPOCRDet: |
| | def __init__(self, modelPath, inputSize=[736, 736], binaryThreshold=0.3, polygonThreshold=0.5, maxCandidates=200, unclipRatio=2.0, backendId=0, targetId=0): |
| | self._modelPath = modelPath |
| | self._model = cv.dnn_TextDetectionModel_DB( |
| | cv.dnn.readNet(self._modelPath) |
| | ) |
| |
|
| | self._inputSize = tuple(inputSize) |
| | self._inputHeight = inputSize[0] |
| | self._inputWidth = inputSize[1] |
| | self._binaryThreshold = binaryThreshold |
| | self._polygonThreshold = polygonThreshold |
| | self._maxCandidates = maxCandidates |
| | self._unclipRatio = unclipRatio |
| | self._backendId = backendId |
| | self._targetId = targetId |
| |
|
| | self._model.setPreferableBackend(self._backendId) |
| | self._model.setPreferableTarget(self._targetId) |
| |
|
| | self._model.setBinaryThreshold(self._binaryThreshold) |
| | self._model.setPolygonThreshold(self._polygonThreshold) |
| | self._model.setUnclipRatio(self._unclipRatio) |
| | self._model.setMaxCandidates(self._maxCandidates) |
| |
|
| | self._model.setInputSize(self._inputSize) |
| | self._model.setInputMean((123.675, 116.28, 103.53)) |
| | self._model.setInputScale(1.0/255.0/np.array([0.229, 0.224, 0.225])) |
| |
|
| | @property |
| | def name(self): |
| | return self.__class__.__name__ |
| |
|
| | def setBackendAndTarget(self, backendId, targetId): |
| | self._backendId = backendId |
| | self._targetId = targetId |
| | self._model.setPreferableBackend(self._backendId) |
| | self._model.setPreferableTarget(self._targetId) |
| |
|
| | def setInputSize(self, input_size): |
| | self._inputSize = tuple(input_size) |
| | self._model.setInputSize(self._inputSize) |
| | self._model.setInputMean((123.675, 116.28, 103.53)) |
| | self._model.setInputScale(1.0/255.0/np.array([0.229, 0.224, 0.225])) |
| |
|
| | def infer(self, image): |
| | assert image.shape[0] == self._inputSize[1], '{} (height of input image) != {} (preset height)'.format(image.shape[0], self._inputSize[1]) |
| | assert image.shape[1] == self._inputSize[0], '{} (width of input image) != {} (preset width)'.format(image.shape[1], self._inputSize[0]) |
| |
|
| | return self._model.detect(image) |
| |
|