Category: Miscellaneous
-
Three years ago, I created a CMake project, aiming to build a C/C++ project with Dynamsoft Barcode Reader on Windows, Linux, and macOS. Today, as the world’s top barcode SDK, Dynamsoft Barcode Reader has extended to more operating systems and CPU architectures: ARM32 Linux: Raspberry Pi ARM64 Linux: Jetson Nano...
-
In my previous article, I shared how to integrate Dynamsoft Barcode Reader to LabelImg for annotating barcode objects. It is time to take a further step to make some custom models for barcodes. In this article, I will go through the process that I used Darknet to train YOLO v3...
-
During the pandemic, the demand for camera apps is booming due to the social distancing situation. So, I collected some basic OpenCV webcam sample code implemented in different programming languages and built some simple web apps for remote webcam access. Hopefully, it will be helpful for someone who is getting...
-
When I was trying to run a barcode reader app compiled by MinGW GCC on Windows 10, I got an error message “The procedure entry point _ZNSt18condition_variable10notify_oneEv could not be located in the dynamic link library”. In this article, I will share my experience of how to solve the issue...
-
While using laptops, sometimes you may want to disable the built-in webcam for some reasons, such as security or debugging webcam related programs. Not like a USB webcam, the built-in camera is unpluggable. Therefore, a general way is to open the device manager, find the camera, and disable it. To...
-
AppVeyor is a continuous integration (CI) service used to automatically build code projects and deploy relevant artifacts. It provides build environments for Windows, Linux, and macOS. In this article, I will share how to use AppVeyor to build and deploy Python Wheels (Windows edition) from C/C++ code. Creating Python Wheels...
-
Emscripten supports compiling C/C++ code to wasm files. Dynamic linking is a basic need for building complicated projects. In this article, I will share how to build a standalone wasm file and how to link multiple wasm files in Windows. Tool Installation Python CMake Emscripten git clone https://github.com/emscripten-core/emsdk.git cd...
-
Three years ago, I created a Python extension module for Dynamsoft Barcode Reader C/C++ SDK. The code skeleton has never been changed until recently the SDK updated to v7.0. In the latest barcode SDK, besides the values of barcode symbologies, there are more constant variables needed to be predefined. The...
-
I’ve collected some learning resources of multi-camera programming for iOS and Android. Because of the hardware limitation, I have not tested the samples provided by Apple and Google. Multi-Camera for iOS OS Version v13+ Devices iPhone XS, XS Max, XR and iPad Pro. AVFoundation API Virtual camera ToF Camera N/A...
-
Webpack is a JavaScript module bundler. It is widely used in web frameworks, such as React and Angular. This tutorial shows how to implement a simple web barcode reading app with webpack and Dynamsoft JavaScript Barcode library. What You Should Know Setting Up a Basic Project with Webpack Create a...
-
Vaadin platform, similar to GWT (Google Web Toolkit), is a set of web components that allow developers to implement HTML5 web apps using the Java programming language. This tutorial aims to help developers to create a simple web document scanning app with Vaadin and Dynamic Web TWAIN SDK. Setting Up...
-
LEGO Wedo 2.0 is a fantastic starting point for learning robotics. I developed a simple GUI application to control the LEGO motor using Python, and in this article, I’ll share my journey of selecting the development environment and building the Python app. Learning Resources During my initial research, I came...
-
A month ago, Mozilla announced WASI (WebAssembly system interface) in their blog post. WASI is a new standardization that allows WebAssembly code to run anywhere. Although WASI is still a work in progress prototype, I can’t wait to try it out. Building Wasmtime in Windows 10 Wasmtime is a standalone...
-
Dynamsoft Android Camera SDK is coming soon. In this article, let’s preview the SDK and learn how to write an Android document scanning app with a few lines of Kotlin code. Features Automatic border detection Trimming and perspective correction Image enhancement iOS image processing Offline I/O and PDF Customizable UI...
-
When creating a new project in Visual Studio, there are two options for version control: Git, which is distributed version control, and Team Foundation Version Control (TFVC), which is centralized version control. Personally, I am a Git advocate, but my team selects TFVC as the version control tool. Generally, I...
-
TIFF (Tagged Image File Format) is a file format for storing raster graphics images. TIFF supports many different compression schemes. This post demonstrates how to build libtiff to make it work for TIFF files that hold JPEG compressed images. Prerequisites Visual Studio CMake Libjpeg Building LibTIFF with CMake Get and...
-
Windows PowerShell is nothing new. It has been along with Windows for many years. Honestly, I preferred to use CMD more than PowerShell due to the learning cost. In the past few years, under the leadership of Satya Nadella, Microsoft is becoming opened and creative. More and more tools and...
-
For a developer, nothing is more important than improving the quality of the code. You probably had this experience that when a project was growing bigger and bigger, you had to spend more time debugging code for inspecting issues – memory leak, null pointer and so on. SonarQube is a...
-
A few weeks ago, Dynamsoft released an iOS camera SDK that aims to help developers quickly build a document scanning app for iOS platform. In this post, I will share how to configure the SDK in Xcode, as well as how to create a simple document scanner app from scratch....
-
Jenkins is an open-source continuous integration tool. I am new to Jenkins. To get familiar with it, I decided to start learning from a CMake project written with Dynamsoft Barcode Reader. Prerequisites Jenkins CMake Dynamsoft Barcode Reader Initializing Jenkins Environment Stop and start Jenkins After installing Jenkins by running setup...
-
Most windows users like to download an installer to install software. However, for developers, probably they would rather like to use a command line tool (APT, Homebrew, etc.), like they get used on Linux and macOS, to install a program. Chocolatey is a command line package manager for Windows. Installing Chocolatey...
-
Last week, I built a Debian package for Dynamsoft Barcode Reader. Installing .deb file is apparently more efficient than using the .tar file on Linux OS based on Debian. Despite this, I believe most of Linux developers will give priority to the command-line package tool apt-get, unless the software repository...
-
I had no idea about LLVM(Low-Level Virtual Machine) until the day I installed Emscripten for learning asm.js and WebAssembly. Emscripten Compiler Frontend (emcc) uses Clang to convert C/C++ files to LLVM bitcode, and Fastcomp (Emscripten’s Compiler Core — an LLVM backend) to compile the bitcode to JavaScript. Installing LLVM on Different Platforms...
-
Last week, I shared how to create a CMake project for Windows. Since CMake is a cross-platform software building tool, I am going to make my C/C++ project support Linux and macOS. This article is Part 2 in a 16-Part Series. Part 1 - Building a C/C++ Barcode & QR Code...
-
If you have a program designed for multiple platforms, you definitely don’t want to waste time configuring and maintaining the building environment. I was thinking how to compile my C/C++ code for Windows, Linux and macOS more conveniently, and after that, I decided to learn CMake. CMake is an open-source,...
-
For the past week, I was looking for a live streaming solution to broadcast video from a USB webcam that connects to Raspberry Pi. This post will help you set up a live streaming server on Raspberry Pi step by step. Installing FFmpeg on Raspberry Pi My first try was to...
-
Using OpenCV APIs to capture video from a camera is convenient. However, OpenCV does not provide an API for listing all available devices. If you have multiple cameras connected to your PC, you have no idea how to choose the right one. To get device information on Windows, you need...
-
It was my first time to hear about WebAssembly when watching Google I/O ‘17. WebAssembly (wasm) lets developers compile C/C++ or other statically typed languages into JavaScript for building high-performance web apps. Assume I have a C/C++ barcode detection or OCR library deployed on server-side, I can now move it to the...
-
Raspbian is a free operating system based on Debian. It is the recommended operating system for Raspberry Pi. If you do not have a Raspberry Pi, you can experience Raspbian by running the OS image in the emulator - QEMU. In this article, I want to share how to resize...
-
When using React and Dynamic Web TWAIN to create a web document scanning app, I was confused about how to load dynamsoft.webtwain.min.js, a global JavaScript library like jQuery, into my project. I spent some time searching Google for relevant questions, but it was hard to find useful answers. Then I...
-
TypeScript, developed by Microsoft, is a superset of JavaScript. It features static typing, class, and interface. Comparing to JavaScript, One of my favorite TypeScript features is that we can create a TypeScript declaration file (.d.ts) for IntelliSense in Visual Studio Code or other supported IDEs. In this article, I will...
-
React Native is a JavaScript framework that enables developers to build mobile apps for Android and iOS platforms with one codebase. Even if you are a web developer, you can quickly develop mobile applications using React Native. Not like Cordova that uses WebViews, React Native produces a truly native user...
-
libuv is a cross-platform C library for Node.js asynchronous I/O model. It implements Node.js event loop and uses a thread pool to avoid blocking the Node.js event loop with time-consuming I/O operations. The post shares how to use libuv to optimize Dynamsoft barcode addon for Node.js. Learning Resources Node.js C/C++ Addons...
-
Flutter, a framework developed by Google, aims to help developers build iOS and Android apps from a single codebase in Dart programming language. It is still an early-stage open-source project. The development environment only works on macOS and Linux (64-bit). I was curious about how Flutter performs comparing to Xamarin...
-
NV21 is the default image format used by Android camera. Assume you want to save the data and view it as a BMP file on PC, how to write code in Java without Android image APIs? Let’s do it from scratch. What is NV21 NV21 is a kind of YUV...
-
Visual Studio Code - a source code editor for Windows, Linux and macOS released by Microsoft - is getting more extensible and customizable. It is interesting to build an extension yourself. In this article, I will share how to create a simple HTML snippet extension for VS Code. Snippet for...
-
If you want to open webcam stream in a web browser, what technology will you choose? Probably many developers’ answer is HTML5. Yes, with the JavaScript API getUserMedia, it will be pretty easy to open webcam within web browsers. However, the API is not supported by some old web browsers like...
-
It is known that getUserMedia, the API defined by WebRTC, is the main method for accessing media capture devices such as webcam and microphone in web pages. The compatible desktop web browsers include Chrome, Firefox, Opera, and Edge. This article will share the resources for learning how to capture and...
-
If you have a USB camera, how can you build a simple C# camera application on Windows 10? There are three options: WIA (Windows Imaging Acquisition), DirectShow and MediaCapture. After trying some sample code that downloaded from CodeProject and GitHub, I got the conclusion: 1. WIA is not good because...
-
No matter whether you are a mobile developer of Android or iOS, your ultimate goal is definitely to publish your apps on Google Play or App Store. Before submitting apps for review, you need to attach some screenshots used for promotion. Furthermore, you can record screen video in order to...
-
When creating an Android library for distribution, besides the class package, source code and documentation are also needed in order to assist developers. Although Eclipse is convenient that you just need to right-click on the project and choose export to generate Javadoc and JAR file, more and more Android developer...
-
When making third party libraries and SDKs for Android development, you could build so files, jar files, or aar files. I prefer providing aar files for distribution since aar file is a simple zip file which includes so files, jar files, and other resources. What’s inside aar file? /AndroidManifest.xml (mandatory) /classes.jar (mandatory)...
-
During Build 2016, Microsoft released a Visual Studio C++ extension for Linux. With the extension, you can use Visual Studio to write C++ code for Linux devices. In this post, let’s take a glimpse of how to install the extension and how to remotely build and debug C/C++ code for...
-
Raspberry Pi 3 has been released for a while. The new RPi device added Bluetooth and Wi-Fi. More and more students and developers tend to study and work using Raspberry Pi, which supported by Windows and Linux. If flashing Windows 10 IoT core on Raspberry Pi, you can build IoT...
-
If you are a software developer, you probably have created a GitHub account to manage, share and learn code. To make your contribution public, GitHub is the right place for open source. However, the hosting service of private repositories on GitHub is not free. If you want to co-work with...
-
Since the day that Microsoft released Visual Studio Code, I had installed it on Windows instead of notepad++. Because VS Code does not have a built-in code formatter or beautifier by default, I was eager to see a more powerful VS Code with extensions. Now there it is. We can...
-
In reality, we can always see some photos that have low brightnesses and low contrast. To make objects recognizable in pictures, we need to process the photo with Illumination Compensation. There are many algorithms used for Illumination Compensation such as Histogram equalization, Color similarity measure, Gamma Correction and so on. In this tutorial, I...
-
Dynamic Web TWAIN (DWT) is a Web-based TWAIN scanning solution, which could be deployed to Windows, Mac OS X, and Linux. Users could visit DWT apps via any HTML5-comptible Web browsers on Windows or Mac. To facilitate the process of Web project deployment, we can use Docker. In this post,...
-
Azure is a powerful cloud computing platform created by Microsoft. It provides various services and solutions including Web apps, virtual machines, SQL database and so forth. I’m interested in virtual machine service and have been experiencing it for a few days. During my work time, I often need to switch...
-
In this tutorial, let’s see how easy to find all contours in an image with OpenCV APIs. Overview Finding contours is a useful task during image processing. The relevant OpenCV functions are as follows: Find contours in a binary image. void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int...
-
Links is one of the critical SEO factors for a Website. When creating or re-designing some pages, we cannot ignore Website audit especially in terms of finding and tracking broken links regularly. Although there are many online tools, it is still worth learning and implementing such a tool ourselves for...
-
In this tutorial, let’s learn how to use Hough line transformation with OpenCV to make line detection in an Image. Hough Line Transform The Hough Line Transform is a transform used to detect straight lines. OpenCV implements three kinds of Hough Line Transforms:(Standard Hough Transform, SHT),(Multi-Scale Hough Transform, MSHT)and (Progressive...
-
Django is a Web application framework written in Python. In this article, I will focus on how to use Django to upload files. Besides a basic demo that based on HTML form, I will also share how to combine Dynamic Web TWAIN SDK with Django to scan and upload image...
-
OpenCV (Open Source Computer Vision Library) is a powerful open source library of computer vision algorithms. It is widely used by many technologies, such as image acquiring (e.g. Webcam capture), image processing (e.g. noise reduction), image detection (e.g. face detection), image recognition (e.g. OCR), and so on. Since all OpenCV...
-
When asking UI designers the question “which raster graphics editor do you prefer”, probably most of the answers are Adobe Photoshop, which seems to be the professionals’ best choice. But as a developer, who only needs to do some simple image editing, I’d like to choose Gimp, which is totally...
-
Before releasing a Windows software, which is not open-source, we have to package everything that we have done in a Windows installer. In this post, I’d like to share how to build a Windows MSI installer with Microsoft Visual Studio 2010. Creating a Basic MSI Installer Click Setup and Deployment,...
-
Previously, I shared an article Making an Android OCR Application with Tesseract. This time, I’d like to share how to build the tesseract OCR library with Microsoft Visual Studio 2008 on Windows. Building Tesseract I’ve tried different ways to set up the building environment, and finally concluded that the most...
-
Tesseract is a well-known open source OCR engine that released under the Apache License 2.0. In this tutorial, I’d like to share how to build the OCR library for Android, as well as how to implement a simple Android OCR application with it. Ads Powered by Dynamsoft Tesseract Android Tools...
-
When writing code in IDEs (Visual Studio, Eclipse, Netbeans, Aptana, etc.), developers need to find useful APIs and relevant documentations quickly. The assist function (e.g. IntelliSense) is usually triggered by the shortcut keys Ctrl + space. See the screenshots of Microsoft Visual Studio and Netbeans. All smart IDEs could automatically...
-
Think of the game, we know that we have 4 teams in play. At a given time, all we need to see is where these 16 planes are. For the game engine, all it needs to know is the coordinates of these 16 planes. So we need to create another...
-
Java Native Interface (JNI) is the glue between Java and native code such as C, C++, and assembly. With JNI, Java applications are capable of supporting platform-specific features. JNI enables developers to call low-level APIs (e.g. SQL, OpenGL etc.) to make Java application more powerful with higher performance. For example, we can...
-
When you are going to purchase a new smartphone like iPhone 6 or Galaxy S5, don’t just throw your old devices away. Via socket connection, we can build a remote monitoring system with obsolete mobile devices instead of purchasing expensive Webcams or wireless cameras. In this article, I’d like to...
-
As a Windows developer, I spent some time looking for an efficient way to create a service, as a counterpart of Windows service, on Mac OS X. Referring to the online documentation – Designing Daemons and Services, there are four types of background processes. The type Launch Daemon satisfies my...
-
In the previous articles, I shared how to implement a .Net WebSocket server with SuperWebSocket. Today, I’d like to continue the series WebSocket: How-to, talking about how to implement a WebSocket server in Java. What is Jetty? “Jetty provides a Web server andjavax.servlet container, plus support forSPDY, WebSocket, OSGi, JMX, JNDI,...
-
Today we start making our Modern Ludo Game from scratch. The first thing to do is draw the board. For this part, we’ll simply use the in HTML5. The MarkUp is very simple: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ModernLudo</title> <link rel="stylesheet" type="text/css" href="Styles/modernludo.css" /> </head> <body> <div id="playGround" style="display:none;"> <div...
-
A Chrome extension is a package of files including a manifest file, HTML files, JavaScript files and other resources. With extensions, we can add more functionalities to empower Chrome. Getting Started with Chrome Extension Chrome Extension Samples Anatomy of Web Page Screenshots The manifest file: { "name": "Screenshot Extension", "version":...
-
HTML5 WebSocket facilitates the communication between web browsers and local/remote servers. If you want to learn a simple websocket example, creating a WebSocket Server in C## and a Web client in JavaScript, you can refer to SuperWebSocket, which is a .NET implementation of Web Socket Server. In this article, I...
-
In this post, let’s take a glimpse of how to organize multiple Visual Studio .sln files under the same directory. Problem about Visual Studio .sln Files For some occassions, you may want to organize the file hierarchy of your Visual Studio projects as belove: All the .sln files are sorted under...
-
If you ever developed some iOS or Android apps, you should know that for localization, the strings should be stored in some resource files and dynamically loaded in apps. What about Windows applications? When I tried to store strings in a resource file in Visual Studio, I met some problems...
-
Last time, I shared my experience about how to use JavaScript saving HTML canvas data to local disk in Chrome. In this tutorial, I would like to share how to save HTML canvas data to remote service with JavaScript and PHP. Ads Powered by Dynamsoft Uploading canvas data is a...
-
When you visit the Dynamic Web TWAIN online demo from Mac OS X, you need to download and install a pkg plugin. How is the installer made? Where is the installed plugin located in the file system? In this tutorial, I will show you how easy it is to make...
-
Recently, I spent several days implementing a web music player. Just for fun. With the player, I can listen to songs that are stored in my home computer. While at work, I just need to start a remote service at my house and then open the browser and input the...
-
In this tutorial, I would like to show how to configure and install nginx on Mac OS X. My Mac system is Mavericks 10.9.2. Prerequisites You have to install Xcode command line tools. Install Nginx Download the latest stable version – nginx 1.4.7. Unzip the downloaded package by the command...
-
In my daily life, I enjoy taking photos with my smartphone and uploading them to various websites. So I started thinking, “Is it possible to implement these functions in a web browser?” Fortunately, the new HTML5 SDK is capable of uploading local images or captured images to web servers. Everything...
-
In HTML5, there is a new tag <canvas>, which is used to draw graphics via JavaScript. In this tutorial, I would like to share how to draw images on canvas, and how to save the canvas data to local disk by clicking button. Ads Powered by Dynamsoft Draw Images on...
-
In this article, I will share the basic concept of Libwebsockets, as well as how to write a simple program with the APIs. What is Libwebsockets Libwebsockets is a lightweight pure C library; built to use minimal CPU and memory resources as well as providing fast throughput in both directions....
-
In this tutorial, let’s learn how to use OpenSSL to generate X.509 certificate request. Certificate signing request is a message sent from an applicant to a certificate authority, which usually includes: Country Name (2 letter code) [US] State or Province Name (full name) [BC] Locality Name (e.g., city) [Vancouver] Organization...
-
It is known that RSA is a cryptosystem which is used for the security of data transmission. This tutorial introduces how to use RSA to generate a pair of public and private keys on Windows. Download and install OpenSSL https://www.openssl.org/community/binaries.html. Find libeay32.lib, ssleay32.lib and libeay32.dll. The following sample code will...
-
Backlink is one of the most important factors for search engine ranking. Thus, the analysis of backlinks is significant for website owners. It is known that Google Webmaster tools can record search traffic allowing users to check the links to their sites. We can download the relevant data as figure...
-
Strong name signatures consist of the identities of an assembly. They are strengthened by both public keys and digital signatures (as generated from the assembly). The identities include the plain text name, version number and regional information of the assembly (if provided). An assembly with a strong name can only...
-
Yesterday, my colleague told me that there was a weird issue that existed in our WPF sample code for Dynamic .NET TWAIN. What we wanted to implement was to create two projects, and start one application from another. The problem was, when we started the invoked application independently, it worked...
-
Control web cameras or the built-in laptop webcams inside IE, Firefox and Chrome with JavaScript In some scenarios, such as Visitor Monitoring module for a government department or Patient Tracking module for a hospital, we may need to take a snap of human faces, patient charts, user IDs and so...
-
Control web cameras from browsers with Dynamic Webcam API Introduction to the Webcam Library Dynamic Webcam SDK is a browser plugin which enables users to acquire images from a webcam, edit and then upload/save them to a database, web server or local disk. Also, it can capture a live video stream into...
-
Nowadays, Webcam is widely used for both personal and business. It is simple, cheap, and yet powerful for image acquisition. Some developers prefer to create their own webcam libraries. In this case, you need to learn technologies like TWAIN, WIA and/or DirectShow. Note: the WIA and DirectShow APIs are recommended...
-
Today when I was browsing the MSDN VC++ forum, I saw a post asking the differences between “Start with debugging” and “Start without debugging”. The original post is: I’m having a problem with a network application I’m coding. I have this connection between a client and a server that only...