Skip to content

Commit 773cff4

Browse files
Migrate from function-based to class-based rendering
1 parent adcb791 commit 773cff4

File tree

3 files changed

+262
-182
lines changed

3 files changed

+262
-182
lines changed

app.py

+13-7
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77

88
from flask import Flask, request, render_template, flash, send_from_directory, redirect
99
from mmif.serialize import Mmif
10+
from mmif.vocabulary import DocumentTypes
1011

1112
import cache
1213
from cache import set_last_access, cleanup
1314
import traceback
14-
from render import render_documents, render_annotations, prepare_and_render_ocr, render_ocr_page
15+
from render import render_documents, render_annotations, prepare_ocr, render_ocr_page
1516

1617
# these two static folder-related params are important, do not remove
1718
app = Flask(__name__, static_folder='static', static_url_path='')
@@ -26,9 +27,11 @@ def index():
2627
@app.route('/ocr', methods=['POST'])
2728
def ocr():
2829
if "page_number" not in request.json:
29-
return serve_first_ocr_page(request.json)
30-
else:
31-
return serve_ocr_page(request.json)
30+
build_ocr_tab(request.json)
31+
request.json["page_number"] = 0
32+
# return serve_first_ocr_page(request.json)
33+
# else:
34+
return serve_ocr_page(request.json)
3235

3336

3437
@app.route('/upload', methods=['GET', 'POST'])
@@ -102,17 +105,20 @@ def render_mmif(mmif_str, viz_id):
102105
annotations=rendered_annotations)
103106

104107

105-
def serve_first_ocr_page(data):
108+
def build_ocr_tab(data):
106109
"""
107-
Prepares OCR (at load time, due to lazy loading) and serves the first page
110+
Prepares OCR (at load time, due to lazy loading)
108111
"""
109112
try:
110113
data = dict(request.json)
111114
mmif_str = open(cache.get_cache_root() /
112115
data["mmif_id"] / "file.mmif").read()
113116
mmif = Mmif(mmif_str)
114117
ocr_view = mmif.get_view_by_id(data["view_id"])
115-
return prepare_and_render_ocr(mmif, ocr_view, data["mmif_id"])
118+
prepare_ocr(mmif, ocr_view, data["mmif_id"])
119+
request.json["vid_path"] = mmif.get_documents_by_type(DocumentTypes.VideoDocument)[
120+
0].location_path()
121+
116122
except Exception as e:
117123
app.logger.error(f"{e}\n{traceback.format_exc()}")
118124
return f'<p class="error">Error: {e} Check the server log for more information.</h1>'

ocr.py

+15
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,21 @@ def add_text_document(self, anno):
127127
[text_val] if text_val not in self.text else self.text
128128

129129

130+
def prepare_ocr(mmif, view, viz_id):
131+
"""
132+
Prepares list of frames that will be passed back and forth between server
133+
and client, and renders the first page of the OCR.
134+
"""
135+
ocr_frames = get_ocr_frames(view, mmif)
136+
137+
# Generate pages (necessary to reduce IO cost) and render
138+
frames_list = [(k, vars(v)) for k, v in ocr_frames.items()]
139+
frames_list = find_duplicates(frames_list)
140+
frames_pages = paginate(frames_list)
141+
# Save page list as temp file
142+
save_json(frames_pages, view.id, viz_id)
143+
144+
130145
def find_annotation(anno_id, mmif):
131146
if mmif.id_delimiter in anno_id:
132147
view_id, anno_id = anno_id.split(mmif.id_delimiter)

0 commit comments

Comments
 (0)