<style>
/* Default Off-Canvas (Hidden) */
.e-off-canvas {
    z-index: 100;
    display: none;
    visibility: hidden;
    opacity: 0;
    transition: visibility 0s linear 0.2s, opacity 0.2s linear;
}

/* Show Off-Canvas */
.e-off-canvas-visible {
    display: block !important;
    visibility: visible !important;
    opacity: 1 !important;
    z-index: 9999 !important;
}

/* Hide Off-Canvas */
.e-off-canvas-hidden {
    visibility: hidden !important;
    opacity: 0 !important;
    z-index: 10 !important;
}

/* White Background Behind Off-Canvas (Using ::before on Body) */
body::before {
    content: "";
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background: rgba(255, 255, 255, 1); /* Solid White */
    opacity: 0;
    visibility: hidden;
    z-index: 9998; /* Just behind Off-Canvas */
    transition: opacity 0.2s linear, visibility 0s linear 0.2s;
}

/* When an Off-Canvas is Open, Show the Background */
body.off-canvas-active::before {
    opacity: 1;
    visibility: visible;
    transition: opacity 0.2s linear;
}
</style>

<script>
jQuery(function($) {
    // Function to force repaint/reflow
    function forceRepaint() {
        document.body.style.display = 'none';
        document.body.offsetHeight; // Force reflow
        document.body.style.display = 'block';
        window.dispatchEvent(new Event('resize'));
    }

    function closeAllOffCanvas(exceptID = null) {
        let anyOpen = false; // Track if another Off-Canvas remains open

        $(".e-off-canvas").each(function() {
            let canvasID = $(this).attr("id");

            if (!exceptID || canvasID !== exceptID) {
                $(this).removeClass("e-off-canvas-visible")
                       .addClass("e-off-canvas-hidden")
                       .attr("aria-hidden", "true")
                       .css({
                           "z-index": "10",
                           "visibility": "hidden",
                           "opacity": "0"
                       });

                // Full removal delay set to 0ms
                setTimeout(() => {
                    if ($(this).attr("aria-hidden") === "true") {
                        $(this).css("display", "none");
                    }
                }, 0);
            } else {
                anyOpen = true; // At least one Off-Canvas is still open
            }
        });

        // Remove white background delay set to 0ms
        setTimeout(() => {
            if (!$(".e-off-canvas-visible").length) {
                $("body").removeClass("off-canvas-active");
                forceRepaint(); // Force repaint when closing all
            }
        }, 0);
    }

    function openOffCanvas(targetID) {
        let targetCanvas = $(targetID);

        if (targetCanvas.length) {
            // Close all others EXCEPT the one we're opening
            closeAllOffCanvas(targetID);

            // Open immediately with delay set to 0ms
            setTimeout(() => {
                targetCanvas.removeClass("e-off-canvas-hidden")
                            .addClass("e-off-canvas-visible")
                            .attr("aria-hidden", "false")
                            .css({
                                "z-index": "9999",
                                "visibility": "visible",
                                "opacity": "1",
                                "display": "block"
                            });

                // Ensure the White Background Stays Visible
                $("body").addClass("off-canvas-active");
                
                // Force repaint after opening
                forceRepaint();

            }, 0);
        }
    }

    // Decode Base64
    function decodeBase64(str) {
        try {
            return atob(str);
        } catch (e) {
            return null;
        }
    }

    // Handle Elementor Off-Canvas OPEN clicks
    $(document).on('click', '[href*="elementor-action%3Aaction%3Doff_canvas%3Aopen"]', function(event) {
        event.preventDefault();
        let href = decodeURIComponent($(this).attr("href"));

        let base64Match = href.match(/settings=([^&]+)/);
        if (base64Match) {
            let decodedSettings = decodeBase64(base64Match[1]);

            try {
                let settingsObj = JSON.parse(decodedSettings);
                if (settingsObj.id) {
                    let offCanvasID = "#off-canvas-" + settingsObj.id;
                    openOffCanvas(offCanvasID);
                }
            } catch (e) {}
        }
    });

    // Handle Elementor Off-Canvas CLOSE clicks
    $(document).on('click', '[href*="elementor-action%3Aaction%3Doff_canvas%3Aclose"]', function(event) {
        event.preventDefault();
        closeAllOffCanvas();
    });

    // Ensure all Off-Canvas elements start hidden
    $(".e-off-canvas").each(function() {
        $(this).attr("aria-hidden", "true").css({
            "z-index": "10",
            "visibility": "hidden",
            "opacity": "0",
            "display": "none"
        });
    });

    // Handle same-page anchor link clicks
    $(document).on('click', 'a[href*="#"]', function(event) {
        let href = $(this).attr('href');
        if (href.indexOf('#') !== -1) {
            // Close all off-canvas widgets when an anchor link is clicked
            closeAllOffCanvas();
        }
    });

});
</script>
				
			
Spektrogramm, Screenshot aus der BirdNet-App

Responsible AI Tools #2 | Identify birds with BirdNET

This post has been translated by an AI and may contain translational inaccuracies.
The European AI landscape is constantly evolving. At the same time, there is growing criticism of many common AI applications and platforms that are not considered responsible and have various gaps, for example in the area of data protection. In our new Responsible AI Tools series, we take a closer look at (supposedly?) responsible AI tools. Our aim is to give you and ourselves an overview of the available alternatives. You can expect presentations (not sponsored!), reports from the field and interviews with experts who will discuss the      responsible use of AI  design.
This time we take a closer look at the BirdNET app, which uses machine learning to assign bird calls to the correct species.

 

The trend began with the pandemic. Young people discovered birdwatching, which had long been decried as a hobby for pensioners, and from then on it was taken up as #birdwatching in numerous internet memes and social media posts. SRF describes birdwatching as the booming hobby of Gen Z. The birdwatching trend has become a meme. So it makes sense to combine innovative technological solutions with the centuries-old interest in nature.

 

This is where BirdNET comes in. According to its own information, the machine learning application can currently recognize around 3,000 bird species, and the number is constantly increasing. This number illustrates the potential of AI, as it is many times more than even an expert human can identify. This makes BirdNET not only interesting for amateur ornithologists, but also an interesting application for biology, environmental protection and related fields.

 

The creators from the TU Chemnitz write the following:

“BirdNET is a research platform that aims to recognize birds based on sounds on a large scale. We support various hardware and operating systems such as Arduino microcontrollers, the Raspberry Pi, smartphones, web browsers, workstation PCs and even cloud services. BirdNET is both a citizen science platform and an analysis software for large audio collections. BirdNET aims to provide innovative tools for conservationists, biologists and birdwatchers alike.”
(Source: TU Chemnitz)

 

Technical functionality

Spectrogram, screenshot from the BirdNet app
Spectrogram, screenshot from the BirdNET app

Sound recordings can be created live in the app itself. The recorded audio data is used to create spectrograms, i.e. visual images of the sounds, which are then classified.

 

According to the paper in Ecological Infomatics, the core model of BirdNET is based on a Residual Neural Network (ResNet), i.e. a special form of Convolutional Neural Network. The architecture of the ResNet was fine-tuned and offers a compromise between performance and efficiency in computing power. The network was trained using data sets that were manually classified by experts. A multi-label classification was used so that several species could be identified at the same time. For the technically savvy readers: The training process uses techniques such as batch normalization, data augmentation and knowledge distillation to improve generalization capabilities.

 

 

 

Explanation of terms:
A Convolutional Neural Network (CNN), also known as a convolutional neural network, is a type of neural network used to analyze visual data. It is designed to mimic the way the human visual system works. It can recognize patterns and objects in images, regardless of their position or orientation.

Multi-label classification is a method in machine learning in which a model can predict several applicable classes simultaneously for each input data set. This is in contrast to conventional classification, in which exactly one class is assigned per example.

 

 

BirdNET in practice

We only tested the iOS version of BirdNET. It has a simple but functional design and works without registration. During setup, the unusually clear data protection information and helpful explanations are immediately apparent.

 

Unlike most apps, it explains in simple language exactly what data is collected and why. The collection of location data is sensibly explained: Bird species occur differently from region to region. The location is therefore a helpful factor and the regional clustering contributes to the accuracy of the answers. The audio data is processed on a university server in the EU. It therefore does not leave the EU and is not used by companies for commercial purposes. Nevertheless, users are asked not to upload sensitive audio recordings. The principle of data minimization is taken seriously here and passed on. This is particularly valuable because users who are less tech-savvy and have no background knowledge of data protection issues are also well informed.

 

Thanks to a clearly designed start page, the app is very easy to use and also works when you need to quickly pick up your cell phone during a bird encounter. In some test situations, it recognized the bird calls quickly and correctly. Unfortunately, however, there were no rare bird species available for testing. A common problem is ambient noise that distorts the sound and/or bird calls that are too quiet, so that no usable spectrogram is produced. However, this is not so much the fault of the app, but depends on the end device and its audio source. By manually selecting individual points in the spectrogram, however, there is at least a small workaround.

 

 

Conclusion: Recommendation

In our opinion, BirdNET can be recommended without reservation and can be considered a role model for AI apps. We were unable to identify any weaknesses in terms of data protection. BirdNET is also a responsible tool due to the large number of target groups and the connection to research and the civilian population alike. The data is used to form regional clusters on a larger scale and to examine correlations. Over the years, this creates a treasure trove of data for biologists. This is clever use of machine learning for a relevant topic. Ultimately, this is more than just a nice gimmick. After all, biodiversity and its decline should be accurately recorded as a result of climate change. A reliable data situation is important in order to be able to adequately plan possible climate and environmental protection measures.

However, there is at least one other app that works on a similar principle to BirdNET, Merlin Sound ID. BirdNET is therefore possibly not the only responsible app that can assign bird calls using AI, which we would like to point out here for the sake of completeness.

 

Text: Sabrina Pohlmann
Technical advice: Jakob Mertes

 


Sources:


Further contributions to the series: