Posts in English
Whisper based speech recognition server
- 27 Dezember 2022
- Munich
- English
- Server-client
In the last blog post: Token authenticated aiohttp server, an authenticated aiohttp server was introduced. In this post, we build on top of the previous posts, to create an Automatic Speech Recognition (ASR) authenticated server, that uses the newly introduced whisper by OpenAI.
Token authenticated aiohttp server
- 31 Dezember 2021
- 08 April 2022
- Monastir
- English
- Server-client
In the previous blog post, a simple aiohttp server was introduced. In the following post we improve the previous server by introducing a simple token authentication mechanism.
Basic aiohttp server
- 31 Dezember 2021
- 16 April 2022
- Monastir
- English
- Server-client
When it comes to deploying an application on a server online, a crucial aspect is its response time since no user wants to wait long for a response. Hence, optimizations and asynchronous processing are the way to go. within this context, aiohttp is a python library that helps implementing asynchronous HTTP Client/Server. The following blog is one of a series of four that will introduce a server implementation, followed by a token based authentication and some stress testing.
Chmod modes: from symbolic to octal and back
Often you will be faced with permission limitations, that will hinder you from manipulating a certain file or directory. To overcome this on Unix-based systems, one can use the chmod command to edit permissions and enable more manipulations possibilities. In this blog, we examine the chmod command and its different modes.
Divide an image into blocks using GDI+ in C++
- 03 Oktober 2020
- 08 April 2022
- Munich
- English
- Image processing
In the previous blog, we used OpenCV to divide an image into multiple blocks of a certain height and width, which is useful when we need to apply a certain image transformation block-wise. This blog will provide an alternative implementation using the Windows API, specifically the GDI+ library.
Divide an image into blocks using OpenCV in C++
- 01 Oktober 2020
- 08 April 2022
- Munich
- English
- Image processing
Often you will need to divide an image into multiple blocks of a certain height and width to apply a certain transformation or would like to compare two images block-wise. This blog will provide a short explanation and a C++ implementation for how to divide an image into multiple blocks with custom height and width.
How to loop over monitors and get their coordinates on Windows in C++?
- 28 September 2020
- 08 April 2022
- Munich
- English
- Image processing
The previous three blogs (Capturing the screen on Windows in C++ using OpenCV & Capturing the screen on Windows in C++ using GDI+ and Comparing screen capturing using GDI+ and OpenCV on Windows in C++) described capturing a screenshot of only one monitor. However, nowadays we often use multiple monitors and capturing the content of all of them or a specific one, two or more. Therefore, we will need to retrieve the coordinates of the targeted monitors. This blog will provide a short explanation and a C++ implementation for how to loop the existing monitors in a multiple monitors setup, get their dimensions and coordinates which can be used later into capturing the monitors content.
Comparing screen capturing using GDI+ and OpenCV on Windows in C++
- 28 Juli 2020
- 08 April 2022
- Munich
- English
- Image processing
To follow up on my last two blogs (Capturing the screen on Windows in C++ using OpenCV & Capturing the screen on Windows in C++ using GDI+ ), we compare in this post both approaches. In order to compare both approaches, we examines their run-times and CPU usages.
Capturing the screen on Windows in C++ using GDI+
- 26 Juli 2020
- 08 April 2022
- Munich
- English
- Image processing
GDI+/ Gdiplus is part of the Win32 API, that helps C/C++ programmers with graphics related tasks on Windows. In this blog, we will be writing a simple algorithm to capture the content of the screen on Windows using Gdiplus in C++.
Capturing the screen on Windows in C++ using OpenCV
- 25 Juli 2020
- 08 April 2022
- Munich
- English
- Image processing
OpenCV is just a great computer vision tool with a wide variety of capabilities, that is available in both C++ and Python. In this first blog about OpenCV, I will be introducing a simple algorithm to capture the content of the screen on Windows using OpenCV in C++.
Root mean square normalization in Python
- 30 April 2020
- 08 April 2022
- Munich
- English
- Signal processing
Audio normalization is a fundamental audio processing technique that consists of applying a constant amount of gain to an audio in order to bring its amplitude to a target level. A commonly used normalization technique is the Root Mean Square (RMS) normalization. This blog post introduces RMS normalization and provides a Python implementation of it.
Introducing urlstechie and its urls checking tools
- 04 April 2020
- 08 April 2022
- Munich
- English
- Automation
Continuous testing is a vital part of any healthy software development process. Urls must always be tested and broken links must be fixed to guarantee a high quality product. Unfortunately, this is not always trivial and can be tedious. Moreover, most tools available out there cannot handle in-code urls and lack many other needed features. A while back, I ran across this particular Problem and I quickly saw the great automation opportunity this was, and how can Python and Regex help me solve this. This was the start of the urlchecker-action ... from there and with the amazing @vsoch joining, the tools expanded and this was the start of the urlstechie organization.
How to pipe an FFmpeg output and pass it to a Python variable?
- 19 März 2020
- 08 April 2022
- Munich
- English
- Signal processing
When writing code, the key optimization points are speed and efficiency. I often face this dilemma when using FFmpeg with Python. For example: when I need to convert an mp3 to a wave file and then do some processing to it in Python. The simple way to do this, is by using FFmpeg to convert the mp3 input to a wave, then read the wave in Python and do process it. Although this works, but clearly it is neither optimal nor the fastest solution. In this blog post, I will present an improved solution to this inconvenience by piping the output of FFmpeg to Python and directly pass it to a numpy variable.
Spectral leakage and windowing
- 13 März 2020
- 08 April 2022
- Munich
- English
- Signal processing
Windowing is an important part of almost any signal processing system, that helps remove/ reduce spectral leakage when processing a non-periodic signal. This blog post provides a small overview of what is spectral usage, when does it occur and how to use windowing to suppress it.
Naive voice activity detection using short time energy
- 09 Februar 2020
- 08 April 2022
- Munich
- English
- Signal processing
An important part of speech/speaker recognition tasks is distinction of voiced segments from silent ones. This helps -for example- align phonemes with their associated voiced segments and avoid any extra information related to silence/ noise that would degrade the system's accuracy. This problem is known as Voice Activity Detection (VAD). This blog aims to introduce voice activity detection and present simple short time energy based VAD implementation.
Signal framing
- 25 Januar 2020
- 08 April 2022
- Munich
- English
- Signal processing
When it comes to non-stationary signals, spectral features in short parts/ sequences are of great use. Therefore, decomposing the signal into multiple ranges is the way to go about this type of features extraction. This technique is known as frame blocking or framing. The following blog explains why do we need framing and how to do it in python.
Diabetes detection using machine learning (part II)
- 30 Juni 2019
- Munich
- English
- Machine learning
In this 2nd post on detecting diabetes with the help of machine learning and using the Pima Indian diabetic database (PIDD) 1, we will dig into testing various classifiers and evaluating their performances. We will also examine the performance improvements by the data transformations explained in the previous post.
Diabetes detection using machine learning (part I)
- 30 Juni 2019
- Munich
- English
- Machine learning
Diabetes is one of the most serious health challenges today. The publicly available Pima Indian diabetic database (PIDD) have become a popular approach for testing the efficiency of machine learning algorithms 1. Within this context, this blog post is part of 2 posts providing an in depth introduction to diabetes detection using various machine learning approaches. In this first post in particular, we focus on exploring the data at hand and preparing it for machine learning related processing.
Voice based gender recognition using Gaussian mixture models
- 09 Mai 2019
- 10 April 2022
- Munich
- English
- Machine learning
The aforementioned implementation, uses The Free ST American English Corpus data-set (SLR45), which is a free American English corpus by Surfingtech, containing utterances from 10 speakers (5 females and 5 males).
Authenticated encryption
- 01 Mai 2019
- 08 April 2022
- Munich
- English
- Cybersecurity
With growing dependency on information technology and more at stake, the security aspect has become more vital than ever. Within this context acts authenticated encryption(AE) as a shared-key based transform whose goal is to provide secrecy, Integrity and authenticity of the encapsulated data 1. AE combines traditional Symmetric Encryption (SE) with a Message Authentication Code (MAC) in different orders 2. This article introduces the different combinations of authenticated encryption and their applications.
Encryption overview
- 03 März 2019
- 08 April 2022
- Munich
- English
- Cybersecurity
Encryption transforms a plain-text into a cipher-text using an encryption key. The process of reversing this operation uses also a key and is called "decryption" 1. These operations can be explained by the following formulas: \(C=E_{k}(P)\) and \(P=D_{k}(C)\), where P = plain-text, C = cipher-text, E = the encryption method, D = the decryption method, and k = the key 1. There exist several types of encryption (symmetric/asymmetric) and several ciphering techniques (block/stream) and modes etc 1.
Cryptography overview
- 17 Februar 2019
- 18 April 2022
- Munich
- English
- Cybersecurity
Cryptography is mostly associated with the development and creation of mathematical algorithms, which are used to insure various security aspects See 12. It is the cornerstone of modern communications security and is based on various mathematical concepts and theories such as: number theory, computational complexity theory and probability theory 3. The following post provides a quick overview of various cryptography concepts such as encryption, decryption and hashing.
Blog intro
This first blog is a quick introduction of my profile, and motives to start a blog. In this post I will be answering the following questions: