khurrameycon commited on
Commit
0842811
·
verified ·
1 Parent(s): 1eb7421

image from pdf

Browse files
Files changed (1) hide show
  1. app.py +49 -7
app.py CHANGED
@@ -10,6 +10,7 @@ from PyPDF2 import PdfReader
10
  from threading import Thread
11
  from flask import Flask, request, jsonify
12
  import io
 
13
 
14
  # Check if we're running in a Hugging Face Space and if SPACES_ZERO_GPU is enabled
15
  # IS_SPACES_ZERO = os.environ.get("SPACES_ZERO_GPU", "0") == "1"
@@ -64,17 +65,56 @@ processor = AutoProcessor.from_pretrained(model_name, use_auth_token=HF_TOKEN)
64
  # return response
65
 
66
 
67
- def predict_image(image_url, text):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  try:
69
  # Download the image from the URL
70
  # response = requests.get(image_url)
71
  # response.raise_for_status() # Raise an error for invalid responses
72
  # image = Image.open(io.BytesIO(response.content)).convert("RGB")
73
-
74
- response = requests.get(image_url)
75
- response.raise_for_status() # Raise an error for invalid responses
76
- image = Image.open(io.BytesIO(response.content)).convert("RGB")
77
-
 
 
78
  messages = [
79
  {"role": "user", "content": [
80
  {"type": "image"}, # Specify that an image is provided
@@ -200,6 +240,7 @@ PROMPT = (
200
  "'Course Name:'\n"
201
  "'Course Description:'\n"
202
  "'Course Credits:'\n"
 
203
  "'Delivery Method:'\n"
204
  "'Prerequisite(s):'\n"
205
  "'Co-requisite(s):'\n"
@@ -263,7 +304,8 @@ def extract_info():
263
  if data["img_url"] is not None:
264
  prompt_skills = f"{PROMPT_IMAGE}\n"
265
  img_url = data["img_url"]
266
- response_image = predict_image(img_url, prompt_skills)
 
267
  else:
268
  response_image = ''
269
 
 
10
  from threading import Thread
11
  from flask import Flask, request, jsonify
12
  import io
13
+ import fitz
14
 
15
  # Check if we're running in a Hugging Face Space and if SPACES_ZERO_GPU is enabled
16
  # IS_SPACES_ZERO = os.environ.get("SPACES_ZERO_GPU", "0") == "1"
 
65
  # return response
66
 
67
 
68
+ def extract_image_from_pdf(pdf_url, dpi=75):
69
+ """
70
+ Extract first page of PDF as image in memory
71
+
72
+ Args:
73
+ pdf_url (str): URL of PDF
74
+ dpi (int): Image resolution
75
+
76
+ Returns:
77
+ PIL.Image: First page as image or None
78
+ """
79
+ try:
80
+ # Download PDF
81
+ response = requests.get(pdf_url, timeout=30)
82
+ response.raise_for_status()
83
+
84
+ # Open PDF from bytes
85
+ pdf_document = fitz.open(stream=response.content, filetype="pdf")
86
+
87
+ # Get first page
88
+ first_page = pdf_document[0]
89
+
90
+ # Render page to pixmap
91
+ pix = first_page.get_pixmap(matrix=fitz.Matrix(dpi/72, dpi/72))
92
+
93
+ # Convert to PIL Image
94
+ img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
95
+
96
+ pdf_document.close()
97
+ return img
98
+
99
+ except Exception as e:
100
+ print(f"Error extracting first page: {e}")
101
+ return None
102
+
103
+
104
+
105
+ def predict_image(image_url, text, file_pref):
106
  try:
107
  # Download the image from the URL
108
  # response = requests.get(image_url)
109
  # response.raise_for_status() # Raise an error for invalid responses
110
  # image = Image.open(io.BytesIO(response.content)).convert("RGB")
111
+ if file_pref == 'img':
112
+ response = requests.get(image_url)
113
+ response.raise_for_status() # Raise an error for invalid responses
114
+ image = Image.open(io.BytesIO(response.content)).convert("RGB")
115
+ else:
116
+ image = extract_image_from_pdf(image_url)
117
+
118
  messages = [
119
  {"role": "user", "content": [
120
  {"type": "image"}, # Specify that an image is provided
 
240
  "'Course Name:'\n"
241
  "'Course Description:'\n"
242
  "'Course Credits:'\n"
243
+ "'Course Learning Outcomes:'\n"
244
  "'Delivery Method:'\n"
245
  "'Prerequisite(s):'\n"
246
  "'Co-requisite(s):'\n"
 
304
  if data["img_url"] is not None:
305
  prompt_skills = f"{PROMPT_IMAGE}\n"
306
  img_url = data["img_url"]
307
+ file_pref = data["file_pref"]
308
+ response_image = predict_image(img_url, prompt_skills, file_pref)
309
  else:
310
  response_image = ''
311