{"id":15469240,"url":"https://github.com/vvmnnnkv/swiftcv","last_synced_at":"2025-04-22T12:18:00.516Z","repository":{"id":105806550,"uuid":"181786767","full_name":"vvmnnnkv/SwiftCV","owner":"vvmnnnkv","description":"Minimal Swift for TensorFlow OpenCV bindings","archived":false,"fork":false,"pushed_at":"2020-02-04T22:36:09.000Z","size":4532,"stargazers_count":41,"open_issues_count":0,"forks_count":13,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-29T04:36:09.204Z","etag":null,"topics":["opencv","s4ft","swift","swiftpm","tensorflow"],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vvmnnnkv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-17T00:19:46.000Z","updated_at":"2024-08-06T20:40:45.000Z","dependencies_parsed_at":"2023-03-18T05:45:34.495Z","dependency_job_id":null,"html_url":"https://github.com/vvmnnnkv/SwiftCV","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvmnnnkv%2FSwiftCV","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvmnnnkv%2FSwiftCV/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvmnnnkv%2FSwiftCV/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvmnnnkv%2FSwiftCV/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vvmnnnkv","download_url":"https://codeload.github.com/vvmnnnkv/SwiftCV/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250237843,"owners_count":21397403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["opencv","s4ft","swift","swiftpm","tensorflow"],"created_at":"2024-10-02T01:57:31.762Z","updated_at":"2025-04-22T12:18:00.508Z","avatar_url":"https://github.com/vvmnnnkv.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SwiftCV\n\nMinimal Swift for TensorFlow OpenCV4 bindings, partially ported from [gocv](https://github.com/hybridgroup/gocv).\n\nOpenCV Functions exposed:\n * resize\n * getRotationMatrix2D\n * warpAffine\n * copyMakeBorder\n * GaussianBlur\n * remap\n * imdecode\n * imread\n * cvtColor\n * flip\n * transpose\n * VideoCapture (Not supported on Colab)\n * ImShow (Not supported on Colab)\n * WaitKey\n \nOpenCV's `Mat` can be converted to S4TF's `Tensor` and `ShapedArray` types (and back).\n \nSee [`Extra/Tests.ipynb`](Extra/Tests.ipynb) and [`Tests`](Tests/SwiftCVTests/SwiftCVTests.swift) as an example of usage.\n\nTry demo [notebook in Colab](https://colab.research.google.com/github/vvmnnnkv/SwiftCV/blob/master/Extra/Tests.ipynb).\n\n## Usage\n### Installation\nInclude as SwiftPM package:\n\n```swift\n.package(url: \"https://github.com/vvmnnnkv/SwiftCV.git\", .branch(\"master\"))\n```\n\nIn a Jupyter Notebook:\n\n```swift\n%system curl -sL https://github.com/vvmnnnkv/opencv-colab/raw/master/opencv4.tar.gz | tar zxf - -C / \u0026\u0026 ldconfig /opt/opencv-4.1.0/lib/ \u0026\u0026 ln -s /opt/opencv-4.1.0/lib/pkgconfig/opencv4.pc /usr/lib/pkgconfig/opencv4.pc\n\n%install-location $cwd/swift-packages\n%install '.package(url: \"https://github.com/vvmnnnkv/SwiftCV.git\", .branch(\"master\"))' SwiftCV\n```\n\n\u003e **NOTE: OpenCV4 must installed in order for package to compile.**\n\nRun the `install/install_cv4.sh` script ([written by Jeremy Howard](https://github.com/fastai/course-v3/blob/master/nbs/swift/SwiftCV/install/install_cv4.sh)) to install opencv4.\n\n### API\n#### Loading an image\n```swift\n// load image in memory\nlet url = \"https://live.staticflickr.com/2842/11335865374_0b202e2dc6_o_d.jpg\"\nlet imgContent = Data(contentsOf: URL(string: url)!)\n\n// make opencv image\nvar cvImg = imdecode(imgContent)\n// convert color scheme to RGB\ncvImg = cvtColor(cvImg, nil, ColorConversionCode.COLOR_BGR2RGB)\nshow_img(cvImg)\n```\n\n#### Rotate\n\n```swift\nresize(cvImg, nil, Size(100, 50), 0, 0, InterpolationFlag.INTER_AREA)\n```\n\n#### Zoom / Crop\n\n```swift\nlet zoomMat = getRotationMatrix2D(Size(cvImg.cols, cvImg.rows / 2), 0, 2)\nwarpAffine(cvImg, nil, zoomMat, Size(600, 600))\n```\n\n#### Rotate\n\n```swift\nlet rotMat = getRotationMatrix2D(Size(cvImg.cols / 2, cvImg.rows / 2), 20, 1)\nwarpAffine(cvImg, nil, rotMat, Size(cvImg.cols, cvImg.rows))\n```\n\n#### Pad\n\n```swift\ncopyMakeBorder(cvImg, nil, 40, 40, 40, 40, BorderType.BORDER_CONSTANT, RGBA(0, 127, 0, 0))\n```\n\n#### Blur\n\n```swift\nGaussianBlur(cvImg, nil, Size(25, 25))\n```\n\n#### Flip\n\n```swift\nflip(cvImg, nil, FlipMode.HORIZONTAL)\n```\n\n#### Transpose\n\n```swift\ntranspose(cvImg, nil)\n```\n\n#### Viewing webcam\n\n```swift\nlet cap = VideoCapture(0)\n// Optional, reduces latency a bit\ncap.set(VideoCaptureProperties.CAP_PROP_BUFFERSIZE, 1)\n\nlet frame = Mat()\n\nwhile true {\n    cap.read(into: frame)\n    ImShow(image: frame)\n    WaitKey(delay: 1)\n}\n```\n\n#### Lightning / Contrast\n\n\u003e This requires [Swift for TensorFlow](https://github.com/tensorflow/swift).\n```swift\n// convert image to floats Tensor\nvar imgTens = Tensor\u003cFloat\u003e(Tensor\u003cUInt8\u003e(cvMat: cvImg)!) / 255\nlet contr:Float = 1.8\nlet lightn:Float = 0.2\nlet mean = imgTens.mean()\nimgTens = (imgTens - mean) * contr + mean + lightn\n```\n\n#### Noise\n\u003e This requires [Swift for TensorFlow](https://github.com/tensorflow/swift).\n```swift\n// convert image to Tensor\nvar imgTens = Tensor\u003cFloat\u003e(Tensor\u003cUInt8\u003e(cvMat: cvImg)!) / 255\nlet randTens = Tensor\u003cFloat\u003e(randomNormal: imgTens.shape) * 0.1\nimgTens += randTens\n```\n\n## Disclaimer\nCurrently this package is just an example of OpenCV/S4TF integration with no safety checks and guarantees to work properly :)\n\n## License\nOpenCV C API, (c) Copyright [gocv](https://github.com/hybridgroup/gocv) authors. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvvmnnnkv%2Fswiftcv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvvmnnnkv%2Fswiftcv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvvmnnnkv%2Fswiftcv/lists"}