-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathocrapi.swift
78 lines (69 loc) · 3.01 KB
/
ocrapi.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
func callOCRSpace() {
// Create URL request
let url = URL(string: "https://api.ocr.space/Parse/Image")
var request: URLRequest? = nil
if let url = url {
request = URLRequest(url: url)
}
request?.httpMethod = "POST"
let boundary = "randomString"
request?.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let session = URLSession.shared
// Image file and parameters
let imageData = UIImage(named: "yourImage")?.jpegData(compressionQuality: 0.6)
let parametersDictionary = ["apikey" : "yourAPIKey", "isOverlayRequired" : "True", "language" : "eng"]
// Create multipart form body
let data = createBody(withBoundary: boundary, parameters: parametersDictionary, imageData: imageData, filename: "yourImage.jpg")
request?.httpBody = data
// Start data session
var task: URLSessionDataTask? = nil
if let request = request {
task = session.dataTask(with: request, completionHandler: { (data, response, error) in
var result: [AnyHashable : Any]? = nil
do {
if let data = data {
result = try JSONSerialization.jsonObject(with: data, options: []) as? [AnyHashable : Any]
}
} catch let myError {
print(myError)
}
print(result!)
})
}
task?.resume()
}
func createBody(withBoundary boundary: String?, parameters: [AnyHashable : Any]?, imageData data: Data?, filename: String?) -> Data? {
var body = Data()
if data != nil {
if let data1 = "--\(boundary ?? "")\r\n".data(using: .utf8) {
body.append(data1)
}
if let data1 = "Content-Disposition: form-data; name=\"\("file")\"; filename=\"\(filename ?? "")\"\r\n".data(using: .utf8) {
body.append(data1)
}
if let data1 = "Content-Type: image/jpeg\r\n\r\n".data(using: .utf8) {
body.append(data1)
}
if let data = data {
body.append(data)
}
if let data1 = "\r\n".data(using: .utf8) {
body.append(data1)
}
}
for key in parameters!.keys {
if let data1 = "--\(boundary ?? "")\r\n".data(using: .utf8) {
body.append(data1)
}
if let data1 = "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: .utf8) {
body.append(data1)
}
if let parameter = parameters?[key], let data1 = "\(parameter)\r\n".data(using: .utf8) {
body.append(data1)
}
}
if let data1 = "--\(boundary ?? "")--\r\n".data(using: .utf8) {
body.append(data1)
}
return body
}