File size: 1,235 Bytes
da3a00e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
```python
from typing import Dict, Any
from .models_registry import model_registry

async def extract_chart_features(image_bytes: bytes) -> Dict[str, Any]:
    # First get OCR data
    ocr_data = await model_registry.run_ocr(image_bytes)
    
    # Then get visual analysis
    vision_data = await model_registry.analyze_chart_image(image_bytes)
    
    # Combine results
    return {
        "trend": vision_data.get("trend", "unknown"),
        "key_levels": extract_key_levels(ocr_data.get("text", "")),
        "patterns": vision_data.get("patterns", []),
        "timeframe": infer_timeframe(ocr_data.get("text", "")),
        "raw_ocr": ocr_data
    }

def extract_key_levels(ocr_text: str) -> list:
    # Simple heuristic to find numbers in OCR text
    import re
    numbers = re.findall(r"\d+\.\d+", ocr_text)
    return sorted([float(n) for n in numbers], reverse=True)

def infer_timeframe(ocr_text: str) -> str:
    if "1D" in ocr_text or "daily" in ocr_text.lower():
        return "1D"
    elif "4H" in ocr_text or "4h" in ocr_text:
        return "4h"
    elif "1H" in ocr_text or "1h" in ocr_text:
        return "1h"
    elif "15M" in ocr_text or "15m" in ocr_text:
        return "15m"
    return "1h"  # default
```