Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alfianlosari/aireceiptscanner
Swift library that utilize GPT-4o for scanning receipt and its items
https://github.com/alfianlosari/aireceiptscanner
ai-scanner ios ipados linux macos receipt-scanner swift swiftui tvos visionos watchos
Last synced: 5 days ago
JSON representation
Swift library that utilize GPT-4o for scanning receipt and its items
- Host: GitHub
- URL: https://github.com/alfianlosari/aireceiptscanner
- Owner: alfianlosari
- License: mit
- Created: 2024-06-29T07:01:39.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-07-08T22:23:49.000Z (6 months ago)
- Last Synced: 2024-12-08T03:22:56.110Z (15 days ago)
- Topics: ai-scanner, ios, ipados, linux, macos, receipt-scanner, swift, swiftui, tvos, visionos, watchos
- Language: Swift
- Homepage:
- Size: 43 KB
- Stars: 74
- Watchers: 4
- Forks: 6
- Open Issues: 2
-
Metadata Files:
- Readme: README.MD
- License: LICENSE
Awesome Lists containing this project
README
# AIReceiptScanner for Swift
![Alt text](https://i.ibb.co.com/ZKhcwPg/Screenshot-2024-06-30-at-11-36-16.png "image")
Scan for items and details in a receipt using ChatGPT
## Features
- Receipt Scanner - Scan input of image receipt to output Swift Model containing receipt detail and items purchased.
- Receipt Picker Scanner Menu View (Apple Platforms Only) - Menu Button to select receipt image from camera/photo library/file picker to prompt ChatGPT with
- Receipt Scanner Scan Result View (Apple Platforms Only) - Display the result of receipt scan in SwiftUI List with copy as JSON button
- Receipt Picker Scanner View (Apple Platforms Only) - Combine both Menu and Result View to provide E2E flow to users for picking, scanning, and viewing the result.## Supported Platforms
- iOS 17
- macOS 14
- tvOS 17
- watchOS 9
- visionOS 1.x
- Linux## Installation
### Swift Package Manager
- File > Swift Packages > Add Package Dependency
- Copy and paste this URL```swift
https://github.com/alfianlosari/AIReceiptScanner
```### Import
Import to your project source file.```swift
import AIReceiptScanner
```## Requirement
Register for API key fromx [OpenAI](https://openai.com/api). Initialize with api key
## Usage
### AI Receipt Scanner
Simply initialize passing the `apiKey`
```swift
let myImage // NSImage/UIImage
let receiptScanner = AIReceiptScanner(apiKey: apiKey)
let receipt = try await receiptScanner.scanImage(image)
print(receipt)
```Pass these optional params for customization:
- `targetSize`: Size used to crop the image, default is 512x512, you should not pass resolution larger than 1024
- `compressionQuality`: JPG Compression rate used to compress the image before sending to ChatGPT
- `model` ChatGPTModel enum (gpt-4o, or any models that support multi-modal vision)
- `temperature` Temperature used by ChatGPT for response.Make sure you are in tier that eligible for gpt-4o models access. You can learn more from here [How can I access GPT-4, GPT-4 Turbo and GPT-4o?](https://help.openai.com/en/articles/7102672-how-can-i-access-gpt-4-gpt-4-turbo-and-gpt-4o).
If you're not sure just pass gpt-4o models, by default it uses `gpt-4o`
### Receipt Picker Scanner Menu View (Apple Platform Only)
You can use `ReceiptPickerScannerDefaultMenuView` SwiftUI View to display Menu for users to select image from Photo Library or File Picker. By default, it will shows the selected image and a Text informing the user to select an image.
Declare a state for `scanStatus`. This is an `enum` containing the state such as `pickingImage`, `prompting`, `success` that you can observe using `onChange` modifier
You need to add key of `Privacy - Photo Library Usage Description` & `Privacy - Camera` Usage Description` in `info.plist` when using this
```swift
@State var scanStatus = .idlevar body: some View {
ReceiptPickerScannerDefaultMenuView(apiKey: apiKey, scanStatus: $scanStatus)
.onChange(of: vm.scanStatus) { _, newValue in
switch newValue {
case .pickingImage:
print("Picking image")
case .prompting(let image):
print("prompting gpt-4o with receipt image")
case .success(let scanResult):
print("Success with \(scanResult)")
case .failure(let error, let image):
print("Error \(error.localizedDescription)")
default: break
}
}
}
```You can also provide your own Custom Menu label if you prefer to using `ReceiptPickerScannerMenuView`
```swift
var body: some View {
ReceiptPickerScannerMenuView(apiKey: apiKey, scanStatus: $scanStatus, label: {
Text("My Custom Menu View Label")
})
}
```### Receipt Scan Result View (Apple Platform Only)
You can use this SwiftUI View to display the result of scanned receipt in a List
```swift
var body: some View {
ReceiptScanResultView(scanResult: scanResult)
}
```If you're displaying the result in a resizable sheet, you can also pass `applyBottomSheetTrayStyle` as `true` to apply default transparent visual style and presentation detents.
```swift
var body: some View {
ReceiptScanResultView(scanResult: scanResult, applyBottomSheetTrayStyle: true)
}
```
### Receipt Picker Scanner View (Apple Platform Only)This View combines the `ReceiptScanResultView` & `ReceiptPickerScannerMenuView`. Based on the environment horizontal size class, it will adjust the layout:
- `compact`: display the scan result in resizable bottom sheet tray
- `regular`: display the receipt image and the scan result side-by-side with in an `HStack````swift
@State var scanStatus: ScanStatus = .idlevar body: some View {
ReceiptPickerScannerView(apiKey: apiKey, scanStatus: $scanStatus)
.navigationTitle("XCA AI Receipt Scanner")
.onChange(of: scanStatus) { _, newValue in
}
}
```