Files
WCX/scripts/ocr.sh
2026-07-17 17:52:53 +02:00

103 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# --- KONFIGURATION ---
# Skriptet förväntar sig nu miljövariabeln: GOOGLE_VISION_API_KEY
# ---------------------
usage() {
echo "Användning: $0 <bildfil eller URL> [-o utdatafil]"
echo "Exempel 1: $0 kvitto.jpg"
echo "Exempel 2: export GOOGLE_VISION_API_KEY=\"din_nyckel\" && $0 https://example.com/image.png -o text.txt"
exit 1
}
# 1. Kontrollera att miljövariabeln är satt
if [ -z "$GOOGLE_VISION_API_KEY" ]; then
echo "Fel: Miljövariabeln GOOGLE_VISION_API_KEY är inte satt." >&2
echo "Kör detta i terminalen först: export GOOGLE_VISION_API_KEY=\"din_faktiska_nyckel\"" >&2
exit 1
fi
# Kontrollera att vi fick minst ett argument
if [ $# -lt 1 ]; then
usage
fi
INPUT="$1"
OUTPUT_FILE=""
# Hantera flaggor för utdatafil (-o)
if [ "$2" == "-o" ] && [ -n "$3" ]; then
OUTPUT_FILE="$3"
fi
# 2. Hantera bilden (lokal fil vs URL) och koda till Base64
if [[ "$INPUT" =~ ^https?:// ]]; then
# Det är en URL - ladda ner och koda till Base64 i minnet
if ! command -v curl &> /dev/null; then
echo "Fel: curl krävs men är inte installerat." >&2
exit 1
fi
BASE64_IMAGE=$(curl -s "$INPUT" | base64)
else
# Det är en lokal fil
if [ ! -f "$INPUT" ]; then
echo "Fel: Filen '$INPUT' hittades inte." >&2
exit 1
fi
# Hanterar både Mac (base64) och Linux (base64 -w 0) för att undvika radbrytningar i Base64-strängen
if [[ "$OSTYPE" == "darwin"* ]]; then
BASE64_IMAGE=$(base64 "$INPUT")
else
BASE64_IMAGE=$(base64 -w 0 "$INPUT")
fi
fi
# 3. Skapa JSON-payloaden
JSON_PAYLOAD=$(cat <<EOF
{
"requests": [
{
"image": {
"content": "$BASE64_IMAGE"
},
"features": [
{
"type": "TEXT_DETECTION"
}
]
}
]
}
EOF
)
# 4. Skicka till Google Cloud Vision API och filtrera ut texten via 'jq'
if command -v jq &> /dev/null; then
RESULT=$(curl -s -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d "$JSON_PAYLOAD" \
"https://vision.googleapis.com/v1/images:annotate?key=$GOOGLE_VISION_API_KEY" | jq -r '.responses[0].textAnnotations[0].description')
else
echo "Tips: Installera 'jq' (t.ex. 'brew install jq' eller 'apt install jq') för att få ren text." >&2
RESULT=$(curl -s -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d "$JSON_PAYLOAD" \
"https://vision.googleapis.com/v1/images:annotate?key=$GOOGLE_VISION_API_KEY")
fi
# Kontrollera om vi fick något svar eller om det blev fel
if [ "$RESULT" == "null" ] || [ -z "$RESULT" ]; then
echo "Ingen text hittades eller så uppstod ett API-fel." >&2
exit 1
fi
# 5. Skriv ut resultatet (till fil eller stdout)
if [ -n "$OUTPUT_FILE" ]; then
echo "$RESULT" > "$OUTPUT_FILE"
echo "Klart! Texten har sparats i $OUTPUT_FILE"
else
echo "$RESULT"
fi