Как прочитать штрих -код из PDFDocument с использованием зрения?IOS

Программируем под IOS
Ответить
Anonymous
 Как прочитать штрих -код из PDFDocument с использованием зрения?

Сообщение 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


Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-vision
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»