File size: 4,210 Bytes
9ba3ade
 
 
 
 
 
d16f678
d1f847f
9c62372
 
a81ff23
 
44ef745
 
7a1124b
ebca3e9
44ef745
3b59cf8
 
 
a81ff23
b71edf1
 
 
 
3b59cf8
facc042
9c2cf20
3b59cf8
155a59b
d16f678
3b59cf8
 
 
 
 
d92c861
9c62372
d92c861
 
 
 
 
 
 
9c62372
44ef745
 
 
 
3b59cf8
 
e34e74c
3b59cf8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44ef745
3b59cf8
44ef745
3b59cf8
 
 
44ef745
 
9c62372
2c1bec3
55dc24c
44ef745
 
 
 
9c62372
44ef745
 
c6a4a5b
 
 
 
 
5354b70
07846cc
c6a4a5b
44ef745
 
e7eb65e
44ef745
 
e7eb65e
 
 
 
7cbd08f
 
d56d25b
0c297c9
3dd9fb6
054b9b5
3073dc0
11868da
7cbd08f
 
072577c
36def59
7cbd08f
8260f15
e7eb65e
 
a81ff23
 
e7eb65e
0e39dca
44ef745
9c62372
55dc24c
 
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
try: from pip._internal.operations import freeze
except ImportError: # pip < 10.0
    from pip.operations import freeze

pkgs = freeze.freeze()
for pkg in pkgs: print(pkg)
import os 
from fastapi import FastAPI, HTTPException, File, UploadFile,Query
from fastapi.middleware.cors import CORSMiddleware
from PyPDF2 import PdfReader
import google.generativeai as genai
import json
import base64
from io import BytesIO
from PIL import Image
import io
import requests
import fitz  # PyMuPDF
import os


from dotenv import load_dotenv
# Load the environment variables from the .env file
load_dotenv()

# Configure Gemini API
secret = "AIzaSyAKs7xSbMwVPLQP0_jeQI6KAV7_JPuFZ60"
genai.configure(api_key=secret)
model_vision = genai.GenerativeModel('gemini-1.5-flash')
model_text = genai.GenerativeModel('gemini-pro')






app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)





def vision(file_content):
    # Open the PDF
    pdf_document = fitz.open("pdf",file_content)
    gemini_input = ["extract the whole text"]
    # Iterate through the pages
    for page_num in range(len(pdf_document)):
        # Select the page
        page = pdf_document.load_page(page_num)
        
        # Render the page to a pixmap (image)
        pix = page.get_pixmap()
        print(type(pix))
        
        # Convert the pixmap to bytes
        img_bytes = pix.tobytes("png")
        
        # Convert bytes to a PIL Image
        img = Image.open(io.BytesIO(img_bytes))
        gemini_input.append(img)
        # # Save the image if needed
        # img.save(f'page_{page_num + 1}.png')
    
    print("PDF pages converted to images successfully!")
    
    # Now you can pass the PIL image to the model_vision
    response = model_vision.generate_content(gemini_input).text
    return response


@app.post("/get_ocr_data/")
async def get_data(input_file: UploadFile = File(...)):
    #try:
        # Determine the file type by reading the first few bytes
        file_content = await input_file.read()
        file_type = input_file.content_type
        
        text = ""

        if file_type == "application/pdf":
                # Read PDF file using PyPDF2
                pdf_reader = PdfReader(io.BytesIO(file_content))
                for page in pdf_reader.pages:
                    text += page.extract_text()
                    
                if len(text)<10:
                   print("vision called")
                   text = vision(file_content)
        else:
            raise HTTPException(status_code=400, detail="Unsupported file type")

        # Call Gemini (or another model) to extract required data
        prompt = f"""This is CV data: {text.strip()} 
                IMPORTANT: The output should be a JSON array! Make Sure the JSON is valid.
                                                                  
                Example Output:
                [
                    "firstname" : "firstname",
                    "lastname" : "lastname",
                    "gender" : "gender",
                    "email" : "email",
                    "contact_number" : "contact number",
                    "age" : "age",
                    "home_address" : "full home address",
                    "home_town" : "home town or city",
                    "total_years_of_experience" : "total years of experience",
                    "LinkedIn_link" : "LinkedIn link",
                    "positions": [ "Job title 1", "Job title 2", "Job title 3" ],
                    "industry": "industry of work",
                    "experience" : "experience",
                    "skills" : Skills(Identify and list specific skills mentioned in both the skills section and inferred from the experience section)
                ]
                """
        
        response = model_text.generate_content(prompt)
        print(response.text)
        data = json.loads(response.text.replace("JSON", "").replace("json", "").replace("```", ""))
        return {"data": data}

    #except Exception as e:
        #raise HTTPException(status_code=500, detail=f"Error processing file: {str(e)}")