omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    How to access VisionKit?

    Pythonista
    help needed objcutil
    5
    43
    14153
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • stephen
      stephen @cvp last edited by

      @cvp the recent iPadOS update seems to have effected accesing different areas of the sandbox. and unless someone finds the new access classes, Apple will have some upset developers on thier hands lol

      1 Reply Last reply Reply Quote 1
      • JonB
        JonB last edited by

        Have you checked supported?

        cvp 1 Reply Last reply Reply Quote 0
        • cvp
          cvp @JonB last edited by

          @JonB I tried but does not exist in dir(VNDocumentCameraViewController).
          And the process seems to be realized, you receive the camera, take a photo, system aligns a frame, you tap save ..... and the viewcontroller closes but does not call the didfinish

          mikael 1 Reply Last reply Reply Quote 0
          • mikael
            mikael @cvp last edited by

            @cvp, @JonB, same behavior on iPhone.

            isSupported returns True.

            cvp 2 Replies Last reply Reply Quote 0
            • cvp
              cvp @mikael last edited by cvp

              @mikael @JonB strange, on my iPad mini 4, three different prints and their results

              	print('VNDocumentCameraViewController.isSupported')
              	print(VNDocumentCameraViewController.isSupported)
              	print()
              	print('dir(VNDocumentCameraViewController.isSupported)')
              	print(dir(VNDocumentCameraViewController.isSupported))
              	print()
              	print('VNDocumentCameraViewController.isSupported()')
              	print(VNDocumentCameraViewController.isSupported())
              '''
              VNDocumentCameraViewController.isSupported
              <objc_util.ObjCInstanceMethodProxy object at 0x113ca84e0>
              
              dir(VNDocumentCameraViewController.isSupported)
              ['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'method_cache', 'name', 'obj']
              
              VNDocumentCameraViewController.isSupported()
              Traceback (most recent call last):
                File "_ctypes/callbacks.c", line 234, in 'calling callback function'
                File "/var/containers/Bundle/Application/34BAEE1A-BC33-4D6F-A0C1-B733E4991F31/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/objc_util.py", line 1066, in OMMainThreadDispatcher_invoke_imp
                  retval = func(*args, **kwargs)
                File "/private/var/mobile/Containers/Shared/AppGroup/668A7D98-7216-47ED-917D-AA0B6173167E/Pythonista3/Documents/VNDocumentCameraViewController.py", line 37, in main
                  print(VNDocumentCameraViewController.isSupported())
                File "/var/containers/Bundle/Application/34BAEE1A-BC33-4D6F-A0C1-B733E4991F31/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/objc_util.py", line 798, in __call__
                  method_name, kwarg_order = resolve_instance_method(obj, self.name, args, kwargs)
                File "/var/containers/Bundle/Application/34BAEE1A-BC33-4D6F-A0C1-B733E4991F31/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/objc_util.py", line 405, in resolve_instance_method
                  raise AttributeError('No method found for %s' % (name,))
              AttributeError: No method found for isSupported
              ''' 
              
              1 Reply Last reply Reply Quote 0
              • cvp
                cvp @mikael last edited by cvp

                @mikael @jonb class without alloc and init returns True

                	VNDocumentCameraViewController = ObjCClass('VNDocumentCameraViewController')#.alloc().init()
                	print('VNDocumentCameraViewController.isSupported()')
                	print(VNDocumentCameraViewController.isSupported()) 
                
                1 Reply Last reply Reply Quote 0
                • JonB
                  JonB last edited by

                  I bet the function name is wrong, or the arguments are wrong.

                  Shouldn't it be
                  documentCameraViewController_didFinishWithScan_?

                  You could also swizzle respondsToSelector on your delegate, and log what gets queried.
                  Have you checked what the protocol

                  cvp 3 Replies Last reply Reply Quote 1
                  • cvp
                    cvp @JonB last edited by

                    @JonB doc gives this name and we are not alone with this problem, see here

                    1 Reply Last reply Reply Quote 0
                    • cvp
                      cvp @JonB last edited by cvp

                      @JonB said:

                      documentCameraViewController_didFinishWithScan_

                      You're right. I sincerely don't understand how I could do so big mistake.
                      Thanks, I'll try

                      Édit: save button does not close the view

                      JonB 1 Reply Last reply Reply Quote 0
                      • cvp
                        cvp last edited by cvp

                        The delegate is called but the view is not closed as I though thus I have proven by writing in a file. And restart Pythonista because I could not close the view.

                        def documentCameraViewController_didFinishWithScan_(_self, _cmd, _controller, _scan):
                        	with open('a.txt',mode='wt') as fil:
                        		fil.write('documentCameraViewController_didFinishWithScan_')
                        	print('documentCameraViewController_didFinishWithScan_')
                        	VNDocumentViewController = ObjCInstance(_controller)
                        	scan = ObjCInstance(_scan)	# VNDocumentCameraScan
                        	#print(scan) 
                        .
                        .
                        .
                        
                        methods = [documentCameraViewController_didFinishWithScan_, documentCameraViewController_didFailWithError_, documentCameraViewControllerDidCancel_]
                        
                        
                        JonB 1 Reply Last reply Reply Quote 0
                        • JonB
                          JonB last edited by

                          This post is deleted!
                          1 Reply Last reply Reply Quote 0
                          • JonB
                            JonB @cvp last edited by

                            @cvp perhaps you need to dismiss the _controller?

                            cvp 1 Reply Last reply Reply Quote 0
                            • cvp
                              cvp @JonB last edited by

                              @JonB I was busy to post this

                              def documentCameraViewController_didFinishWithScan_(_self, _cmd, _controller, _scan):
                              	VNDocumentViewController = ObjCInstance(_controller)
                              	scan = ObjCInstance(_scan)	# VNDocumentCameraScan
                              	#print(scan)
                              	VNDocumentViewController.dismissViewControllerAnimated_completion_(True, None)
                              
                              1 Reply Last reply Reply Quote 0
                              • JonB
                                JonB @cvp last edited by JonB

                                @cvp re: getting the name wrong, in Swift, they omit the "nouns", i think. So the docs show the selectors without nouns. In objc_util it lets you do this too, if you use kwargs.

                                Re: dismissing... So did that work? If not, maybe need to on_main_thread it?

                                1 Reply Last reply Reply Quote 1
                                • cvp
                                  cvp last edited by

                                  scan returns an UIImage

                                  	print(scan.imageOfPageAtIndex_(0)) 
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • cvp
                                    cvp @JonB last edited by

                                    @JonB said:

                                    documentCameraViewController_didFinishWithScan_

                                    One more time, thanks for your help.

                                    I really become too old for this stuff. Shame on me, I'm so sad to have not seen that myself.
                                    Sorry to all people who tried to help us.😢😪

                                    1 Reply Last reply Reply Quote 0
                                    • cvp
                                      cvp @emkay_online last edited by

                                      @emkay_online quick an dirty to see the UIImage

                                      	import ctypes
                                      	from PIL import Image
                                      	UIImage = scan.imageOfPageAtIndex_(0)	
                                      	# Save UIImage to jpg file
                                      	func = c.UIImageJPEGRepresentation
                                      	func.argtypes = [ctypes.c_void_p, ctypes.c_float]
                                      	func.restype = ctypes.c_void_p
                                      	x = ObjCInstance(func(UIImage.ptr, 1.0))
                                      	x.writeToFile_atomically_('test.jpg', True)
                                      	# Display jpg file
                                      	image = Image.open("test.jpg")
                                      	image.show()
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • cvp
                                        cvp @emkay_online last edited by

                                        @emkay_online operational

                                        from objc_util import *
                                        import ui
                                        load_framework('VisionKit')
                                        
                                        def documentCameraViewController_didFinishWithScan_(_self, _cmd, _controller, _scan):
                                        	VNDocumentViewController = ObjCInstance(_controller)
                                        	scan = ObjCInstance(_scan)	# VNDocumentCameraSca
                                        	
                                        	UIImage = scan.imageOfPageAtIndex_(0)	
                                        	ObjCInstance(VNDocumentViewController.ui_view['iv']).setImage_(UIImage)
                                        
                                        	VNDocumentViewController.dismissViewControllerAnimated_completion_(True, None)
                                        	
                                        def documentCameraViewController_didFailWithError_(_self, _cmd, _controller, _error):
                                        	print('documentCameraViewController_didFailWithError_')
                                        	
                                        def documentCameraViewControllerDidCancel_(_self, _cmd, _controller):
                                        	print('documentCameraViewControllerDidCancel_')
                                        
                                        methods = [documentCameraViewController_didFinishWithScan_, documentCameraViewController_didFailWithError_, documentCameraViewControllerDidCancel_]
                                        protocols = ['VNDocumentCameraViewControllerDelegate']
                                        try:
                                        		MyVNDocumentCameraViewControllerDelegate = ObjCClass('MyVNDocumentCameraViewControllerDelegate')
                                        except:
                                        	MyVNDocumentCameraViewControllerDelegate = create_objc_class('MyVNDocumentCameraViewControllerDelegate', methods=methods, protocols=protocols)
                                        
                                        @on_main_thread	
                                        def main():
                                        	VNDocumentCameraViewController = ObjCClass('VNDocumentCameraViewController').alloc().init()
                                        	delegate = MyVNDocumentCameraViewControllerDelegate.alloc().init()
                                        	VNDocumentCameraViewController.delegate = delegate	
                                        
                                        	uiview = ui.View()
                                        	iv = ui.ImageView(name='iv')
                                        	iv.frame = uiview.bounds
                                        	iv.flex = 'wh'
                                        	uiview.add_subview(iv)
                                        	uiview.present('fullscreen')
                                        	VNDocumentCameraViewController.ui_view = uiview	# to pass to delegate
                                        	
                                        	objc_uiview = ObjCInstance(uiview)
                                        	SUIViewController = ObjCClass('SUIViewController')
                                        	vc = SUIViewController.viewControllerForView_(objc_uiview)	
                                        	vc.presentViewController_animated_completion_(VNDocumentCameraViewController, True, None)
                                        	
                                        main() 
                                        
                                        mikael emkay_online 2 Replies Last reply Reply Quote 0
                                        • mikael
                                          mikael @cvp last edited by

                                          @cvp, good stuff. It gives the straightened-out picture, right? Can I get a multi-page PDF, or is the framework for single pictures only?

                                          cvp 1 Reply Last reply Reply Quote 0
                                          • cvp
                                            cvp @mikael last edited by

                                            @mikael no,no, the framework is for multiple scans but my little script not.
                                            I think that if you don't dismiss the camera view controller, you could continue to scan multiple images, but I did not test it.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors