Commit 1fcc5d33 authored by tak2hu's avatar tak2hu
Browse files

modify requirements.txt that follows pep-0496

parent 26f6d2e0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,3 +36,4 @@ config/config.json
*.7z
venv
pip
.DS_Store
 No newline at end of file
+59 −3
Original line number Diff line number Diff line
@@ -246,10 +246,66 @@ class OCRMIT48pxCTC(OCRBase):
        self.chunk_size = chunk_size
        self.model.max_chunk_size = chunk_size
    
import sys, platform
if sys.platform == 'darwin' and platform.mac_ver()[0] >= '10.15':
    from .macos_ocr import get_supported_languages
    langs = list(get_supported_languages()[0])
    APPLEVISIONFRAMEWORK = None
    @register_OCR('macos_ocr')
    class OCRApple(OCRBase):
        params = {
            'Language': {
                'type':'selector',
                'options': langs
            },
            # 'Recognition Level': {
            #     'type': 'selector',
            #     'options': [
            #         'Fast',
            #         'Accurate'
            #     ]
            # }
        }
        language = 'en-US'
        # recognition = 'Accurate'

        def setup_ocr(self):
            global APPLEVISIONFRAMEWORK
            from .macos_ocr import AppleOCR
            if APPLEVISIONFRAMEWORK is None:
                self.model = APPLEVISIONFRAMEWORK = AppleOCR()
            else:
                self.model = APPLEVISIONFRAMEWORK

        def ocr_img(self, img: np.ndarray) -> str:
            return self.model(img)

        def ocr_blk_list(self, img: np.ndarray, blk_list: List[TextBlock]):
            pass

        def updateParam(self, param_key: str, param_content):
            super().updateParam(param_key, param_content)
            language = self.params['language']['select']
            # recognition = self.params['recognition level']['select']

            self.language = language
            # self.recognition = recognition

if sys.platform == 'win32':
    WINDOWSOCRENGINE = None
    @register_OCR('WindowsOCR')
    class OCRWindows(OCRBase):

        def setup_ocr(self):
            global WINDOWSOCRENGINE
            from .windows_ocr import WindowsOCR
            if WINDOWSOCRENGINE is None:
                self.engine = WINDOWSOCRENGINE = WindowsOCR()
            else:
                self.engine = WINDOWSOCRENGINE

        def ocr_img(self, img: np.ndarray) -> str:
            self.engine(img)

        def ocr_blk_list(self, img: np.ndarray, blk_list: List[TextBlock]) -> None:
            pass
 No newline at end of file
+80 −0
Original line number Diff line number Diff line
# https://github.com/straussmaximilian/ocrmac/blob/main/ocrmac/ocrmac.py
# https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac587fc4c
# https://github.com/RhetTbull/textinator/blob/main/src/macvision.py

import Vision
import objc
import platform
from typing import Tuple
import numpy as np

# Vision.VNRequestTextRecognitionLevelAccurate  0
# Vision.VNRequestTextRecognitionLevelFast      1
# Vision.VNRecognizeTextRequestRevision1        1
# Vision.VNRecognizeTextRequestRevision2        2
# Vision.VNRecognizeTextRequestRevision3        3

def get_revision_level():
    with objc.autorelease_pool():
        ver = platform.mac_ver()[0]
        if ver >= '13':
            revision = Vision.VNRecognizeTextRequestRevision3
        # python might return 10.16 instead of 11.0 for Big Sur and above
        elif ver >= '10.16': # ver[0] >= '11'
            revision = Vision.VNRecognizeTextRequestRevision2
        elif ver >= '10.15':
            revision = Vision.VNRecognizeTextRequestRevision1
        return revision

def get_supported_languages(recognition_level=0, revision=get_revision_level()) -> Tuple[Tuple[str], Tuple[str]]:
    """Get supported languages for text detection from Vision framework.

    Returns: Tuple of ((language code), (error))
    """        
    return Vision.VNRecognizeTextRequest.supportedRecognitionLanguagesForTextRecognitionLevel_revision_error_(
        recognition_level, revision, None
        )

def text_from_image(image: np.ndarray, recognition_level="accurate", language_preference=None):
    recognition_level = recognition_level.lower()
    if language_preference == 'Auto':
        language_preference = None
    image = image.tobytes()

    with objc.autorelease_pool():
        req = Vision.VNRecognizeTextRequest.alloc().init()

        if recognition_level == "fast":
            req.setRecognitionLevel_(1)
        else:
            req.setRecognitionLevel_(0)

        if language_preference is not None:
            req.setRecognitionLanguages_(language_preference)

        handler = Vision.VNImageRequestHandler.alloc().initWithData_options_(
            image, None
        )

        success = handler.performRequests_error_([req], None)
        res = []
        if success:
            for result in req.results():
                bbox = result.boundingBox()
                w, h = bbox.size.width, bbox.size.height
                x, y = bbox.origin.x, bbox.origin.y

                res.append((result.text(), result.confidence(), [x, y, w, h]))

        req.dealloc()
        handler.dealloc()

        return res


class AppleOCR:
    def __init__(self):
        pass

    def __call__(self, img) -> str:
        pass
 No newline at end of file
+37 −0
Original line number Diff line number Diff line
# https://gist.github.com/dantmnf/23f060278585d6243ffd9b0c538beab2
# https://github.com/GitHub30/winocr/blob/main/winocr.py
# https://learn.microsoft.com/en-us/windows/powertoys/text-extractor#how-to-query-for-ocr-language-packs

from winsdk.windows.media.ocr import OcrEngine
from winsdk.windows.globalization import Language
from winsdk.windows.storage.streams import DataWriter
from winsdk.windows.graphics.imaging import SoftwareBitmap, BitmapPixelFormat

import platform
from distutils.version import LooseVersion

def does_windows_version_support_this():
    pass


def get_supported_language_packs():
    pass

def get_installed_ocr_language_packs():
    pass

def install_ocr_language_pack():
    pass

def uninstall_ocr_language_pack():
    pass

def image2text():
    pass

class WindowsOCR:
    def __init__(self):
        pass
    
    def __call__(self, img) -> str:
        pass
 No newline at end of file
+7 −1
Original line number Diff line number Diff line
@@ -37,4 +37,10 @@ openai
pyyaml
httpx[socks,brotli]
langdetect
# pywin32 required on windows
pywin32; sys_platform == 'win32'
winsdk; sys_platform == 'win32'
pyobjc-core; sys_platform == 'darwin'
pyobjc-framework-cocoa; sys_platform == 'darwin'
pyobjc-framework-coreml; sys_platform == 'darwin'
pyobjc-framework-quartz; sys_platform == 'darwin'
pyobjc-framework-vision; sys_platform == 'darwin'
 No newline at end of file
Loading