Submit a request
Follow

Scanning

Q: Is it possible to perform multi-capture, i.e. with several Artec 3D scanners, connected to a one PC?

A: Sure, use IScanningProcedureBundle for this purpose.

 

Q: Where can I find the description of scanning algorithms?
A: Please check this link: Tweaking Scanning settings.

 

Q: What is the rawest form depth data that I can access?
A: The rawest form of data which can be accessed through SDK is triangular mesh.

 

Q: Can I get the depth of the frame or the depth map of the mesh?
A: Apparently, there is an option to obtain a depth-map equivalent, by projecting the mesh onto the corresponding image from the texture camera.

For example, if an Artec 3D scanner is mounted on the robotic arm, then you can calculate the movement of the scanner in space, relative to the part, using the positioning information from the robot. Then, you can obtain the image from the texture camera and the geometry camera (mesh) corresponding to the necessary position in space, then combine the two, and use your existing algorithms to make the necessary calculations with the gaps.

Moreover, here you can find an example of obtaining a depth map from a combination of the image and mesh here: https://stackoverflow.com/questions/33745446/depth-map-from-calibrated-image-and-triangular-mesh-using-opencv-and-matlab
 

Q: What scanning procedures are available?
A: IScanningProcedure::setState() can have the following states:

  • ScanningState_Preview starts the preview session or, when pressed in the recording mode, pauses the recording of the frames.
  • ScanningState_Record enables recording of the frames into a new scan.
  • ScanningState_ContinueRecord.
  • ScanningState_Stop stops scanning procedure.

As soon as you stop scanning procedure, you receive N scans (N is the number of changes from ScanningState_Record to ScanningState_Preview).

 

Q: How can I stop scanning procedure?
A: There are two ways to stop the scanning process.

The first method is to set the number of maximum captured frames (desc.maxFrameCount) and after system records this amount of frames, the scanning process will be stopped automatically.

The second method is to stop scanning procedure via pressing the button on Spider/Eva. In this case:

  • Set desc.maxFrameCount = 0, so it will not be limited from the software side.
  • Use interface IScannerObserver. The part you will need is called ScannerObserverBase, for example, SimpleScannerObserver : public asdk::ScannerObserverBase in scanning-and-process-sample.h.

Original code in the sample:

case artec::sdk::capturing::ScannerButton_Stop:
std::cout << "ScannerEvent : stop button was pressed" << std::endl;
break;

Scanning procedure modification:

case artec::sdk::capturing::ScannerButton_Stop:
std::cout << "ScannerEvent : stop button was pressed" << std::endl;
scanning->setState(ScanningState_Stop);
break;

 

Q: How can I assist 3D-scanner operator? Can I show him any preview or maybe display the scanned data in real-time?

A:  You can use any of these methods:

  • You can setup the displaying of a preview image before any recording happens. You can use ScanningState called ScanningState_Preview for this purpose and show the image in GLFW viewer window.
  • If you need to display some captured frames while scanning without real-time tracking, then please use scanningCallback which is the interface of IScanningProcedureObserver inside ScanningProcedureSettings. There are callbacks inside this interface to receive the currently captured frame, so this frame can be displayed in your application to help operator. For instance, Artec Studio displays 50 last recorded key frames and 5 non-key frames and you can implement something similar into your SDK-based application.
  • We use GLFW viewer to demonstrate final fusion (3D mesh) in our SDK sample and, with some modifications, this sample can be used to output the raw scanned data. GLFW is used only as an example here, technically you can use any method, for example, GDI+

A small note about GLFW:
Our sample with GLFW viewer and demonstration of a final 3D mesh uses OpenGL. The libraries of OpenGL in this sample are linked to libraries of Visual Studio 2010, though the API of some functions changed in Visual Studio 2015. So if you would like to run this particular sample, then you will need to find GLFW library compiled for Visual Studio 2015. Here is the link that our clients usually use: http://www.glfw.org/docs/latest/compile.html

 

Q: How can I add the same scanning features and parameters as in Artec Studio "Scan" section?

A: Here is the list of the most popular ones:

  1. "Features to track" are controlled by enum RegistrationAlgorithmType function in IScanningProcedure interface (default value is hybrid, i.e. geometry+texture).
  2. "Scanning speed" can be adjusted via IScanner::setFPS() method. Please don't use "sleep" delay inside the onFrameCaptured() method of the IScanningProcedureObserver interface implementation (that callback should be lightweight).
  3. "Depth of field" can be controlled via function setScanningRange in IScanningProcedure interface. The default values are in millimetres, more information can be found here: technical specifications of Artec scanners.
  4. "Texture brightness" can be changed via function setTextureGain in IScanner. Alternatively, you can also use setTextureShutterSpeed (in this case please use getTextureGain or getTextureShutterSpeed commands to find the default values).
  5. "Sensitivity" is controlled via function setSensitivity in the IScannerProcedure interface (in this case please use command getSensitivity to find the default value). The range is from 0.0f to 1.0f.
  6. "Do not record texture" can be set via function CaptureTextureMethod in IScannerProcedure interface (default value is OnTextureKeyFrame).
  7. "Disable flash bulb" is controlled via function enableTextureFlash in IScanner interface (default value is Enabled).

 

We are here to help! If you have any questions or issues, please do not hesitate to contact our team by emailing support@artec-group.com or by clicking on "Ask Support" button on the upper part of the screen. We will always be happy to assist you and will get back to you as soon as we can.