Мне нужно прочитать штрих -код из документа PDF. Он создан из данных, полученных с помощью расширения общего. Если ничего не найдено, я стараюсь «разделить» каждую страницу вертикально на две и пытаться обнаружить.extension PDFPage {
// MARK: - Public Methods
func renderToImages() -> [UIImage] {
let topImage = generateHelfedImage(cutype: .top)
let bottomImage = generateHelfedImage(cutype: .bot)
return [
topImage ?? UIImage(),
bottomImage ?? UIImage()
]
}
func renderToImage() -> UIImage {
let pageBounds = self.bounds(for: .mediaBox)
let fullImage = generateImage(height: pageBounds.size.height)
return fullImage ?? UIImage()
}
// MARK: - Private Methods
private enum CutType {
case top
case bot
}
private func generateHelfedImage(cutype: CutType) -> UIImage? {
let pageBounds = self.bounds(for: .mediaBox)
let render = UIGraphicsImageRenderer(size: CGSize(
width: pageBounds.width,
height: cutype == .top ? pageBounds.height / 2 : pageBounds.height)
)
let imageBounds = CGRect(x: 0,
y: 0,
width: pageBounds.size.width,
height: pageBounds.size.height)
let image = render.image { context in
UIColor.white.set()
context.fill(imageBounds)
context.cgContext.translateBy(x: 0, y: cutype == .bot ? pageBounds.height / 2 : pageBounds.height)
context.cgContext.scaleBy(x: 1, y: -1)
draw(with: .mediaBox, to: context.cgContext)
}
return image.resizeTo(targetSize: pageBounds.size, scale: image.scale)
}
private func generateImage(height: CGFloat) -> UIImage? {
let pageBounds = self.bounds(for: .mediaBox)
let renderSize = CGSize(
width: pageBounds.width,
height: pageBounds.height
)
let imageBounds = CGRect(
x: 0,
y: 0,
width: renderSize.width,
height: renderSize.height
)
let render = UIGraphicsImageRenderer(size: renderSize)
let image = render.image { context in
UIColor.orange.set()
context.fill(imageBounds)
context.cgContext.translateBy(x: 0, y: height)
context.cgContext.scaleBy(x: 1, y: -1)
draw(with: .mediaBox, to: context.cgContext)
}
return image
}
}
extension PDFDocument {
func convertToImages(halfPages: Bool) -> [UIImage] {
var images: [UIImage] = []
for pageIndex in 0..
guard let page = page(at: pageIndex) else { continue }
if halfPages {
let imagesHalfed = page.renderToImages()
images += imagesHalfed
} else {
let fullImage = page.renderToImage()
images.append(fullImage)
}
}
return images
}
}
< /code>
enum VNRequestType: CaseIterable {
case code
func request(completion: @escaping([T]?) -> Void) -> VNRequest {
switch self {
case .code:
let request = VNDetectBarcodesRequest { request, error in
guard error == nil else {
return completion(nil)
}
var observations: [VNBarcodeObservation] = []
for result in request.results ?? [] {
if let observation = result as? VNBarcodeObservation {
observations.append(observation)
}
}
if observations.isEmpty {
return completion(nil)
}
let findedCodes = observations.map { ($0.payloadStringValue, $0.symbology) }
return completion(findedCodes as? [T])
}
request.symbologies = [
.upce,
.code39,
.code93,
.code128,
.ean8,
.ean13,
.aztec,
.pdf417,
.itf14,
.dataMatrix
]
return request
}
}
}
extension UIImage {
func resizeTo(targetSize: CGSize, scale: CGFloat = 1.0) -> UIImage {
let currentSize = self.size
let widthRatio = targetSize.width / currentSize.width
let heightRatio = targetSize.height / currentSize.height
var newSize: CGSize
if widthRatio > heightRatio {
newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
} else {
newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
}
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
UIGraphicsBeginImageContextWithOptions(newSize, false, scale)
self.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage ?? UIImage()
}
func detect(
content type: [T].Type,
with requests: [VNRequestType],
completion: @escaping([T]?) -> Void
) throws {
guard let cgImage = self.cgImage else { return }
let handler = VNImageRequestHandler(cgImage: cgImage)
let request = requests.map { $0.request(completion: completion) }
try handler.perform(request)
}
}
< /code>
I tried to use thumbnail too
Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-vision
Как прочитать штрих -код из PDFDocument с использованием зрения? ⇐ IOS
Программируем под IOS
-
Anonymous
1740847399
Anonymous
Мне нужно прочитать штрих -код из документа PDF. Он создан из данных, полученных с помощью расширения общего. Если ничего не найдено, я стараюсь «разделить» каждую страницу вертикально на две и пытаться обнаружить.extension PDFPage {
// MARK: - Public Methods
func renderToImages() -> [UIImage] {
let topImage = generateHelfedImage(cutype: .top)
let bottomImage = generateHelfedImage(cutype: .bot)
return [
topImage ?? UIImage(),
bottomImage ?? UIImage()
]
}
func renderToImage() -> UIImage {
let pageBounds = self.bounds(for: .mediaBox)
let fullImage = generateImage(height: pageBounds.size.height)
return fullImage ?? UIImage()
}
// MARK: - Private Methods
private enum CutType {
case top
case bot
}
private func generateHelfedImage(cutype: CutType) -> UIImage? {
let pageBounds = self.bounds(for: .mediaBox)
let render = UIGraphicsImageRenderer(size: CGSize(
width: pageBounds.width,
height: cutype == .top ? pageBounds.height / 2 : pageBounds.height)
)
let imageBounds = CGRect(x: 0,
y: 0,
width: pageBounds.size.width,
height: pageBounds.size.height)
let image = render.image { context in
UIColor.white.set()
context.fill(imageBounds)
context.cgContext.translateBy(x: 0, y: cutype == .bot ? pageBounds.height / 2 : pageBounds.height)
context.cgContext.scaleBy(x: 1, y: -1)
draw(with: .mediaBox, to: context.cgContext)
}
return image.resizeTo(targetSize: pageBounds.size, scale: image.scale)
}
private func generateImage(height: CGFloat) -> UIImage? {
let pageBounds = self.bounds(for: .mediaBox)
let renderSize = CGSize(
width: pageBounds.width,
height: pageBounds.height
)
let imageBounds = CGRect(
x: 0,
y: 0,
width: renderSize.width,
height: renderSize.height
)
let render = UIGraphicsImageRenderer(size: renderSize)
let image = render.image { context in
UIColor.orange.set()
context.fill(imageBounds)
context.cgContext.translateBy(x: 0, y: height)
context.cgContext.scaleBy(x: 1, y: -1)
draw(with: .mediaBox, to: context.cgContext)
}
return image
}
}
extension PDFDocument {
func convertToImages(halfPages: Bool) -> [UIImage] {
var images: [UIImage] = []
for pageIndex in 0..
guard let page = page(at: pageIndex) else { continue }
if halfPages {
let imagesHalfed = page.renderToImages()
images += imagesHalfed
} else {
let fullImage = page.renderToImage()
images.append(fullImage)
}
}
return images
}
}
< /code>
enum VNRequestType: CaseIterable {
case code
func request(completion: @escaping([T]?) -> Void) -> VNRequest {
switch self {
case .code:
let request = VNDetectBarcodesRequest { request, error in
guard error == nil else {
return completion(nil)
}
var observations: [VNBarcodeObservation] = []
for result in request.results ?? [] {
if let observation = result as? VNBarcodeObservation {
observations.append(observation)
}
}
if observations.isEmpty {
return completion(nil)
}
let findedCodes = observations.map { ($0.payloadStringValue, $0.symbology) }
return completion(findedCodes as? [T])
}
request.symbologies = [
.upce,
.code39,
.code93,
.code128,
.ean8,
.ean13,
.aztec,
.pdf417,
.itf14,
.dataMatrix
]
return request
}
}
}
extension UIImage {
func resizeTo(targetSize: CGSize, scale: CGFloat = 1.0) -> UIImage {
let currentSize = self.size
let widthRatio = targetSize.width / currentSize.width
let heightRatio = targetSize.height / currentSize.height
var newSize: CGSize
if widthRatio > heightRatio {
newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
} else {
newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
}
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
UIGraphicsBeginImageContextWithOptions(newSize, false, scale)
self.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage ?? UIImage()
}
func detect(
content type: [T].Type,
with requests: [VNRequestType],
completion: @escaping([T]?) -> Void
) throws {
guard let cgImage = self.cgImage else { return }
let handler = VNImageRequestHandler(cgImage: cgImage)
let request = requests.map { $0.request(completion: completion) }
try handler.perform(request)
}
}
< /code>
I tried to use thumbnail too
Подробнее здесь: [url]https://stackoverflow.com/questions/79181754/how-to-read-a-barcode-from-a-pdfdocument-using-vision[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия