Я хочу использовать PDFBox, чтобы получить тексты из PDF-файла с их ограничивающими рамками. Мне удалось собрать здесь код, который делает почти это, но, как вы можете видеть, полученные мной ограничивающие рамки (нарисованные синим цветом) имеют неправильный размер, как если бы я выбрал тексты. Где в моем коде расчеты могли пойти не так?
Я хочу использовать PDFBox, чтобы получить тексты из PDF-файла с их ограничивающими рамками. Мне удалось собрать здесь код, который делает почти это, но, как вы можете видеть, полученные мной ограничивающие рамки (нарисованные синим цветом) имеют неправильный размер, как если бы я выбрал тексты. Где в моем коде расчеты могли пойти не так? [code]class CustomPDFTextStripper : PDFTextStripper() {
@Throws(IOException::class) override fun writeString(text: String, textPositions: List) { // Initialize bounding box coordinates val wordSeparator = wordSeparator val word: MutableList = ArrayList()
// Get the page height to correctly adjust the Y-coordinates val page = document.getPage(0) val pageHeight = page.mediaBox.height
for (text in textPositions) { val thisChar = text.unicode if (thisChar != null && thisChar.isNotEmpty()) { if (thisChar != wordSeparator) { word.add(text) } else if (word.isNotEmpty()) { printWord(word, pageHeight) word.clear() } } } if (word.isNotEmpty()) { printWord(word, pageHeight) } }
@Throws(IOException::class) fun printWord(word: List, pageHeight: Float) { if (word.isEmpty()) return
// Create a bounding box for the word var boundingBox: Rectangle2D? = null for (text in word) { val box = Rectangle2D.Float(text.xDirAdj, pageHeight - text.yDirAdj - text.heightDir, text.widthDirAdj, text.heightDir) if (boundingBox == null) { boundingBox = box } else { boundingBox.add(box) } }
// Draw the bounding box val page = document.getPage(0) // Assumes drawing on the first page PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true).use { contentStream -> contentStream.setStrokingColor(Color.BLUE) contentStream.setLineWidth(1f) if (boundingBox != null) { contentStream.addRect(boundingBox.x.toFloat(), boundingBox.y.toFloat()+boundingBox.height.toFloat(), boundingBox.width.toFloat(), boundingBox.height.toFloat()) contentStream.stroke() } }
// Print word and bounding box details val builder = StringBuilder() for (text in word) { builder.append(text.unicode) } println("${builder.toString()} [(X=${boundingBox!!.x}, Y=${boundingBox.y}) height=${boundingBox.height} width=${boundingBox.width}]") } [/code]
Я хочу интегрировать OpenCV с YOLOv8 из ultralytics, поэтому я хочу получить координаты ограничивающего прямоугольника из прогноза модели. Как мне это сделать?
from ultralytics import YOLO
import cv2
Я работаю над отсканированным изображением, которое по сути представляет собой рукописное письмо. Моя цель — найти ограничивающие рамки каждой строки на этом изображении. Но ограничивающие рамки не должны перекрывать друг друга.
Входное...
У меня есть изображение, для которого я хотел бы обнаружить края и нарисовать к нему ограничивающую рамку. Моя проблема в том, что мой код Python не рисует ограничивающую рамку, и я не уверен, что это потому, что он не смог ее обнаружить. объекты в...