#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
EasyOCR скрипт для распознавания текста
Использование: python3 easyocr_script.py <путь_к_изображению> [языки]
"""

import sys
import json
import os
import numpy as np

def convert_to_serializable(obj):
    """Преобразует numpy типы в обычные Python типы для JSON"""
    if isinstance(obj, np.integer):
        return int(obj)
    elif isinstance(obj, np.floating):
        return float(obj)
    elif isinstance(obj, np.ndarray):
        return obj.tolist()
    elif isinstance(obj, (list, tuple)):
        return [convert_to_serializable(item) for item in obj]
    elif isinstance(obj, dict):
        return {key: convert_to_serializable(value) for key, value in obj.items()}
    return obj

def main():
    if len(sys.argv) < 2:
        print(json.dumps({
            'error': 'Не указан путь к изображению',
            'usage': 'python3 easyocr_script.py <image_path> [languages]'
        }))
        sys.exit(1)
    
    image_path = sys.argv[1]
    languages = sys.argv[2].split('+') if len(sys.argv) > 2 else ['en']
    
    # Проверяем существование файла
    if not os.path.exists(image_path):
        print(json.dumps({
            'error': f'Файл не найден: {image_path}'
        }))
        sys.exit(1)
    
    try:
        import easyocr
        import warnings
        
        # Подавляем все предупреждения
        warnings.filterwarnings('ignore')
        os.environ['PYTHONWARNINGS'] = 'ignore'
        
        # Перенаправляем stderr для подавления предупреждений PyTorch
        import io
        stderr_backup = sys.stderr
        sys.stderr = io.StringIO()
        
        # Инициализируем EasyOCR с указанными языками
        # Первый запуск загрузит модели автоматически
        reader = easyocr.Reader(languages, gpu=False, verbose=False)
        
        # Восстанавливаем stderr
        sys.stderr = stderr_backup
        
        # Распознаем текст
        results = reader.readtext(image_path)
        
        # Формируем результат
        text_lines = []
        for (bbox, text, confidence) in results:
            text_lines.append(text)
        
        full_text = '\n'.join(text_lines)
        
        # Преобразуем результаты, конвертируя numpy типы
        details = []
        for (bbox, text, confidence) in results:
            details.append({
                'text': text,
                'confidence': round(float(confidence), 2),
                'bbox': convert_to_serializable(bbox)
            })
        
        # Возвращаем результат в JSON
        result = {
            'success': True,
            'text': full_text,
            'text_length': len(full_text),
            'lines_count': len(text_lines),
            'details': details
        }
        
        print(json.dumps(convert_to_serializable(result), ensure_ascii=False))
        
    except ImportError:
        print(json.dumps({
            'error': 'EasyOCR не установлен. Установите: pip3 install easyocr'
        }))
        sys.exit(1)
    except Exception as e:
        print(json.dumps({
            'error': f'Ошибка EasyOCR: {str(e)}'
        }))
        sys.exit(1)

if __name__ == '__main__':
    main()

