This is going to be my first post on a series of computational explorations on different animal species and biodiversity related topics. Last week on a late night walk, during the Wolfram Tech Conference, I got lucky and I heard one great horned owl singing on the parking lot of Champaigns football stadium. That’s why I’m going to start the series with this species. Listen to my recorded sound on SoundCloud here.
Since this post is actually a cloud embedded notebook, we can easily display a cool intro video using EmbeddedService:
In[]:=
EmbeddedService[{"YouTube","bt3X8MJgJWo"}]
Out[]=

Species Built-in Data

One way of obtaining the species entity of a great horned owl is by using Interpreter:
In[]:=
gHornedOwl=Interpreter["Species"]["Great Horned Owl"]
Out[]=
great horned owl
Once we have the entity of the species, we can check its associated properties, like its, “ScientificName”, “SpeciesAuthority”, and “Image”:
In[]:=
Column
great horned owl
SPECIES SPECIFICATION
[{"ScientificName","SpeciesAuthority","Image"}]
Out[]=
Bubo virginianus
Gmelin, 1788
A quick way to check all properties available for a species is by using “Dataset”:
In[]:=
great horned owl
SPECIES SPECIFICATION
["Dataset"]
Out[]=
alternate common names
{}
alternate scientific names
{}
body temperature
—
class
Class:Aves
common name
great horned owl
family
Family:Strigidae
genus
Genus:Bubo
image
infraspecies
—
kingdom
Kingdom:Animalia
length
(18.1102
to
24.8031)in
maximum recorded lifespan
29yr
maximum speed
—
name
great horned owl
number of members
13
order
Order:Strigiformes
parent entity
Genus:Bubo
phylum
Phylum:Chordata
scientific name
Bubo virginianus
sibling taxa
{
…
17
}
showing 1–20 of 27
Alternatively, we can also use SpeciesData which is equivalent to EntityValue:
In[]:=
length=SpeciesData
great horned owl
SPECIES SPECIFICATION
,"Length"
Out[]=
(18.1102
to
24.8031)
in
In[]:=
EntityValue
great horned owl
SPECIES SPECIFICATION
,"Length"
Out[]=
(18.1102
to
24.8031)
in
Since I’m not American, I need to convert the units to metric system in order to get a picture of the size of great horned owls:
In[]:=
UnitConvert[length,"Centimeters"]
Out[]=
(46.
to
63.)
cm
Oh, Wow! They are actually bigger than I expected.
We can also easily get other eagle owl species using “Siblings”:
In[]:=
otherEagleOwls=SpeciesData[gHornedOwl,"Siblings"]
Out[]=

spotted eagle-owl
,
pharaoh eagle-owl
,
blakiston'sfish owl
,
Eurasian eagle-owl
,
Bubo capensis
,
Bubo cinerascens
,
Bubo coromandus
,
Verreaux's eagle-owl
,
Bubo leucostictus
,
Bubo magellanicus
,
spot-bellied eagle-owl
,
philippine eagle-owl
,
Bubo poensis
,
snowy owl
,
Bubo shelleyi
,
Bubo sumatranus
,
Bubo vosseleri

In[]:=
eagleOwls=Append[otherEagleOwls,gHornedOwl];
Now, we can easily create a MenuView with most of existing eagle owls species around the globe:
In[]:=
MenuView[DeleteMissing[Thread[Rule[eagleOwls,SpeciesData[eagleOwls,"Image"]]],2],13]
Out[]=
great horned owl
Or what other subspecies of Great Horned Owl do exist using “SubEntities”:
In[]:=
subspecies=gHornedOwl["SubEntities"]
Out[]=

Bubo virginianus subsp. algistus
,
Bubo virginianus subsp. elachistus
,
Bubo virginianus subsp. heterocnemis
,
Northwestern Horned Owl
,
Bubo virginianus subsp. mayensis
,
Bubo virginianus subsp. mesembrinus
,
Bubo virginianus subsp. nacurutu
,
Bubo virginianus subsp. nigrescens
,
Bubo virginianus subsp. pacificus
,
Virginia great horned owl
,
St.Michael horned owl
,
Western horned owl
,
Bubo virginianus subsp. virginianus


Visualizing a Taxonomic Graph for Eagle Owls

We can easily create a customized taxonomic graph for eagle owls using “TaxonomyGraph” and Graph directives:
In[]:=
{taxonomyGraph,taxonomicSequence,siblings}=SpeciesData[gHornedOwl,{"TaxonomyGraph","TaxonomicSequence","Siblings"}];
GraphtaxonomyGraph,ImageSize800,VertexLabels
Thread[
]
,VertexStyleDirective[Brown,Opacity[0.8]],VertexSize2,EdgeStyleGray,VertexLabelStyleDirective[FontSize13,Bold]

Map of occurrences of Great Horned Owls using iNaturalist data

Once you create an iNaturalist account (free), it’s fairly easy to import a CVS file with all owl observations from Illinois state and we need to setup the directory where we stored the CSV file:
In[]:=
$path="/Users/jofre/species-functions-and-data/iNaturalist/Imported files from Platform";​​SetDirectory[$path];
Amazingly, we can automatically import the CSV file as a nice Dataset using SemanticImport:
In[]:=
data=SemanticImport["owls_observations_Illinois.csv"];
Using GeoGraphics creating a map of Illinois with all owls observations is pretty straightforward:
In[]:=
owlsDistribution=GeoGraphics{Red,PointSize[0.01],Point@GeoPosition[Values@Normal@data[All,{"latitude","longitude"}]]},GeoRange
Illinois, United States
ADMINISTRATIVE DIVISION
,ImageSizeLarge
Out[]=

Let’s create a MenuView with all different species:

Get list of owl species on the dataset and exclude the sub-species:

Combining data from different Maps:

Here, my original idea was to explore multiple geographical data by combining it on a same map, just to show some of the GeoGraphics capabilities that Wolfram Language offers. We will create a density map of Illinois wind farms, a wind vector map and finally combine them with the one from owls occurrences:

Illinois wind farms

Here, I’m going to use some code from Emmanuel Garcés Medina’s WTC19 presentation on Geo Visualizations:

Wind Vector Map of Illinois

Combine all outputs

Identify Great Horned Owl species via audio samples

We can try to automatically identify the great horned owl song that I recorded using my phone near Champaign’s Football Stadium:
First, let’s try AudioIdentify built-in function, analogue to ImageIdentify:
We can use a high and a low pass filter to improve the quality of the audio:

Import audio files from iNaturalist of the most common owls found in Illinois:

As we previously did, it’s fairly easy to import a CSV file with all owl observations with audio from North America:
Again, we can automatically import the CSV file as a nice Dataset using SemanticImport:

Define classes for the two most observed owls in the area:

According to iNaturalist platform the two most common owls observed in Illinois state are:
Define classes according to scientific names:

Scrape available owl sounds with a duration below 10 seconds:

We can use Feature Space Plot to visualize the two different species sounds:
Choose a (first) net to try:
Use this net as a feature extractor into a bigger net that classifies sequence (using max pooling):
Train with early stopping and monitor a set of acknowledged classification performance measurements:
Finally, we can test our trained Neural Network with our original recorded sound:
Yes, It worked!! Furthermore, biologists on iNaturalist have also confirmed that my recorded sound was from a great horned owl.

Other Useful Resources with Species Audio Samples:

◼
  • The Cornell Lab of Ornithology: https://www.birds.cornell.edu/home/
  • ◼
  • Xeno-canto (XC) www.xeno-canto.org is a website for sharing recordings of sounds of wild birds from all across the world.
  • ◼
  • Wolfram Language built-in function WebAudioSearch gives a dataset of the top web audio search results for the specified literal string.
  • Two of our owl species are missing though: