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
    14065
    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.
    • 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
                                    • JonB
                                      JonB last edited by

                                      i think the document object guves you UIImages only, but you could create a pdf using some UIKit functions:

                                      https://developer.apple.com/documentation/uikit/images_and_pdf?language=objc

                                      (you need to acces the functions using c.UIGraphicsBeginPDFContextToFile etc and set argtypes and restype)

                                      I think the basic flow is, you have to create a pdf context to a file, begn a pdf page, draw your content (UiImage's drawAtPoint ), begn a new page, etc, then finally end the context.

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

                                        Do you know that PIL save has an option to save as pdf?

                                        pil_image.save('File.pdf',"PDF",resolution=100.0) 
                                        
                                        stephen JonB 2 Replies Last reply Reply Quote 0
                                        • stephen
                                          stephen @cvp last edited by

                                          @cvp this would of been wonderfull information about 3 months go lol

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

                                            @cvp can PIL do multipage PDF? I guess you still would need to do the ui2pil type business.

                                            mikael cvp 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors