3D-skannauksien tallennus OpenCV:lle
Loponen, Riku (2023)
Loponen, Riku
2023
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-202303264169
https://urn.fi/URN:NBN:fi:amk-202303264169
Tiivistelmä
3D-skannerit ovat yleistyneet teollisuudessa. Toimeksiantaja oli hankkinut 3D-skannereita ja oli kiinnostunut koneoppimisen käyttämisestä 3D-skannauksen yhteydessä. OpenCV konenäkökirjastolla, pystyy kehittämään koneoppimis-algoritmeja konenäköä varten. 3D-skannauksen tuottama pistepilvi ja konenäkökameran ottama kuva eivät datarakenteeltaan eroa paljoa toisistaan, joten koneoppimista päätettiin testata OpenCV kirjastolla.
Koneoppimisen opettaminen ja testaaminen vaatii paljon mittausdataa. Sopivan materiaalin keräämiseen ei ollut valmiuksia, joten tavoitteeksi tuli tallennusohjelman toteutus, jolla pystyy tallentamaan 3D-skannauksia OpenCV:llä käsiteltäväksi. Ennen kuin ohjelma voitiin tehdä, piti tutkia 3D-skannauksien tallennus mahdollisuuksia, käytettyjen laitteiden tukemia tallennusmuotoja sekä niiden ohjelmointirajapintoja.
3D-skannereiden ohjelmistorajapintojen sekä OpenCV kirjaston tallennus mahdollisuudet selvitettiin. Valittiin yksinkertaisin tapa tallentaa mittausdata ja tehtiin ohjelma, jolla saadaan yhteys 3D-skanneriin ja mittaus tallennettua. Tallennusmuodoksi valikoitui OpenCV:n FileStorage funktion tuottama XML-tiedosto. Tiedosto on helppo käyttää OpenCV:llä ja kykenee tallentamaan kaiken 3D-skannerin tuottaman datan. Ohjelmointi tehtiin Visual Studiolla ja käytettiin C++ kieltä. Tallennusohjelmissa noudatettiin laitteistojen ohjelmointiesimerkkejä laitteisiin yhdistämisessä ja datan vastaanottamisessa. Vastaanotetusta datasta tallennettiin pistepilvi OpenCV:n XML-tiedostoon.
Toteutetuilla ohjelmilla pystyy tallentamaan dataa koneoppimisen tutkimista varten. Käytettyä ohjelman toteutustapaa voi käyttää pohjana muillakin 3D-skannereilla, jos niissä on vastaava ohjelmointirajapinta. Ohjelmia kannattaa jatkokehittää ja lisätä niihin pistepilven lisäksi myös muita 3D-skannauksen tietoja, kuten korkeuskartan tai pinnan normaalivektorit. Lisäksi ohjelmiin voisi lisätä valittavaksi muita yleisesti käytettyjä tallennusmuotoja. 3D scanners have become more common in industry. JAMK university had acquired 3D scanners and was interested in using machine learning with them. OpenCV machine vision library can be used to train machine learning algorithms for machine vision. 3D scanned point cloud and picture produced by a camera have similar data structure. It was decided to test machine learning with OpenCV library.
Machine learning requires a lot of data for training and testing it. There were no prerequisite to gather the data. So the target was set to produce a software to gather 3D scans and save them in format that can be accessed with OpenCV. Before the software could be made, 3D scanning file formats and 3D scanners programming interfaces needed to be investigated.
3D scanner’s and OpenCV’s data saving properties were investigated. It was found that the simplest way to save the data was with OpenCV’s FileStorage function. It produces a XML file that can save all the data produced by the scanners. Software was programmed with Visual Studio using C++. Code examples provided by the manufacturer were followed when connecting to the scanner and collecting data. Point cloud was saved from the collected data as a XML file.
The produced programs were able to save data for OpenCV. The way the programs were made can be applied to other makes of 3D scanners if they have a similar programming interface. Programs could be further developed to include more data produced by the scanners such as height map and normal vectors. Also other common file formats could be added.
Koneoppimisen opettaminen ja testaaminen vaatii paljon mittausdataa. Sopivan materiaalin keräämiseen ei ollut valmiuksia, joten tavoitteeksi tuli tallennusohjelman toteutus, jolla pystyy tallentamaan 3D-skannauksia OpenCV:llä käsiteltäväksi. Ennen kuin ohjelma voitiin tehdä, piti tutkia 3D-skannauksien tallennus mahdollisuuksia, käytettyjen laitteiden tukemia tallennusmuotoja sekä niiden ohjelmointirajapintoja.
3D-skannereiden ohjelmistorajapintojen sekä OpenCV kirjaston tallennus mahdollisuudet selvitettiin. Valittiin yksinkertaisin tapa tallentaa mittausdata ja tehtiin ohjelma, jolla saadaan yhteys 3D-skanneriin ja mittaus tallennettua. Tallennusmuodoksi valikoitui OpenCV:n FileStorage funktion tuottama XML-tiedosto. Tiedosto on helppo käyttää OpenCV:llä ja kykenee tallentamaan kaiken 3D-skannerin tuottaman datan. Ohjelmointi tehtiin Visual Studiolla ja käytettiin C++ kieltä. Tallennusohjelmissa noudatettiin laitteistojen ohjelmointiesimerkkejä laitteisiin yhdistämisessä ja datan vastaanottamisessa. Vastaanotetusta datasta tallennettiin pistepilvi OpenCV:n XML-tiedostoon.
Toteutetuilla ohjelmilla pystyy tallentamaan dataa koneoppimisen tutkimista varten. Käytettyä ohjelman toteutustapaa voi käyttää pohjana muillakin 3D-skannereilla, jos niissä on vastaava ohjelmointirajapinta. Ohjelmia kannattaa jatkokehittää ja lisätä niihin pistepilven lisäksi myös muita 3D-skannauksen tietoja, kuten korkeuskartan tai pinnan normaalivektorit. Lisäksi ohjelmiin voisi lisätä valittavaksi muita yleisesti käytettyjä tallennusmuotoja.
Machine learning requires a lot of data for training and testing it. There were no prerequisite to gather the data. So the target was set to produce a software to gather 3D scans and save them in format that can be accessed with OpenCV. Before the software could be made, 3D scanning file formats and 3D scanners programming interfaces needed to be investigated.
3D scanner’s and OpenCV’s data saving properties were investigated. It was found that the simplest way to save the data was with OpenCV’s FileStorage function. It produces a XML file that can save all the data produced by the scanners. Software was programmed with Visual Studio using C++. Code examples provided by the manufacturer were followed when connecting to the scanner and collecting data. Point cloud was saved from the collected data as a XML file.
The produced programs were able to save data for OpenCV. The way the programs were made can be applied to other makes of 3D scanners if they have a similar programming interface. Programs could be further developed to include more data produced by the scanners such as height map and normal vectors. Also other common file formats could be added.