Initial commit

This commit is contained in:
Florent Guiotte 2019-06-03 08:02:55 +02:00
commit 27ea6eb2bd
9 changed files with 3627 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.pdf
*.html

38
Makefile Normal file
View File

@ -0,0 +1,38 @@
PROJECT = template_slides
OPTIONS = --filter pandoc-citeproc --pdf-engine=lualatex --filter video.py
BEAMER_OPTIONS = $(OPTIONS) --highlight-style=tango
## Beamer options
# --highlight-style{=pygments, kate, monochrome, breezeDark, espresso, zenburn, haddock, tango}
REVEAL_OPTIONS = $(OPTIONS) -s -V revealjs-url=./reveal.js \
-V theme=serif \
-V transition=convex \
-V width=1920 \
-V height=1080 \
-V autoPlayMedia=true \
-V slideNumber=true
## Reaveal options
# revealjs-url=https://revealjs.com
# theme={beige, black, blood, league, moon, night, serif, simple, sky, solarized, white}
# transition={none, slide, concave, convex, cube, zoom}
# TODO: paralax background
# TODO: utf8 in latex
# TODO: affiliations
# TODO: logos
# TODO: citations api
# TODO: Fullscreen video
# TODO: pdfpc notes
all: reveal pdf;
pdf:
pandoc $(PROJECT).md -o $(PROJECT).pdf $(BEAMER_OPTIONS) -t beamer
notes:
pandoc $(PROJECT).md -o $(PROJECT)_notes.pdf $(BEAMER_OPTIONS) -t beamer -V classoption=notes
notes-only:
pandoc $(PROJECT).md -o $(PROJECT)_notes.pdf $(BEAMER_OPTIONS) -t beamer -V classoption=notes=only
reveal:
pandoc $(PROJECT).md -o $(PROJECT).html $(REVEAL_OPTIONS) -t revealjs

3214
all.bib Normal file

File diff suppressed because it is too large Load Diff

1
animate.sh Normal file
View File

@ -0,0 +1 @@
ffmpeg -r 30 -i frame_%6d.png -vf loop=90:1:0,setpts=N/FRAME_RATE/TB,scale=900:-1 -c:v libx264 -crf 25 -pix_fmt yuv420p -preset slow paris_animation.mp4

BIN
img/paris.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 KiB

163
pdfpc-commands.sty Normal file
View File

@ -0,0 +1,163 @@
% Package: textpos is required for textblock*
\usepackage[absolute,overlay]{textpos}
% fullFrameMovie
%
% Arguments:
%
% [optional]: movie-options, seperated by &
% Supported options: loop, start=N, end=N, autostart
% Default: autostart&loop
%
% 1. Movie file
% 2. Poster image
% 3. Any text on the slide, or nothing (e.g. {})
%
% Example:
% \fullFrameMovie[loop&autostart]{apollo17.avi}{apollo17.jpg}{\copyrightText{Apollo 17, NASA}}
%
\newcommand{\fullFrameMovie}[4][autostart&loop]
{
{
\setbeamercolor{background canvas}{bg=black}
% to make this work for both horizontally filled and vertically filled images, we create an absolutely
% positioned textblock* that we force to be the width of the slide.
% we then place it at (0,0), and then create a box inside of it to ensure that it's always 95% of the vertical
% height of the frame. Once we have created an absolutely positioned and sized box, it doesn't matter what
% goes inside -- it will always be vertically and horizontally centered
\frame[plain]
{
\begin{textblock*}{\paperwidth}(0\paperwidth,0\paperheight)
\centering
\vbox to 0.95\paperheight {
\vfil{
\href{run:#2?autostart&#1}{\includegraphics[width=\paperwidth,height=0.95\paperheight,keepaspectratio]{#3}}
}
\vfil
}
\end{textblock*}
#4
}
}
}
% inlineMovie
%
% Arguments:
%
% [optional]: movie-options, seperated by &
% Supported options: loop, start=N, end=N, autostart
% Default: autostart&loop
%
% 1. Movie file
% 2. Poster image
% 3. size command, such as width=\textwidth
%
% Example:
% \inlineMovie[loop&autostart&start=5&stop=12]{apollo17.avi}{apollo17.jpg}{height=0.7\textheight}
%
\newcommand{\inlineMovie}[4][autostart&loop]
{
\href{run:#2?#1}{\includegraphics[#4]{#3}}
}
% copyrightText
%
% Produces small text on the right side of the screen, useful for
% stating copyright or other small notes in movies or images
%
% Arguments:
%
% [optional]: text color
% Default: white
%
% 1. Text to be displayed
%
% Example:
% \copyrightText{Full frame image of: Apollo 17, NASA}
%
\newcommand\copyrightText[2][white]{%
\begin{textblock*}{\paperwidth}(0\paperwidth,.97\paperheight)%
\hfill\textcolor{#1}{\tiny#2}\hspace{20pt}
\end{textblock*}
}
% fullFrameImageZoomed
%
% Produces a slide that contains a full frame image. Scales down the image
% to fit if the aspect ratio of the slide does not match the image.
%
% Arguments:
%
% [optional]: color of text on page
% Default: white
%
% 1. Path to image file
% 2. Any additional content on the frame
%
% Example:
% \fullFrameImageZoomed{apollo17.jpg}{\copyrightText{Full frame image of: Apollo 17, NASA}}
%
\newcommand{\fullFrameImage}[3][white]
{
{
\setbeamercolor{normal text}{bg=black,fg=#1}
% to make this work for both horizontally filled and vertically filled images, we create an absolutely
% positioned textblock* that we force to be the width of the slide.
% we then place it at (0,0), and then create a box inside of it to ensure that it's always 95% of the vertical
% height of the frame. Once we have created an absolutely positioned and sized box, it doesn't matter what
% goes inside -- it will always be vertically and horizontally centered
\frame
{
\begin{textblock*}{\paperwidth}(0\paperwidth,0\paperheight)
\centering
\vbox to 0.95\paperheight {
\vfil{
\includegraphics[width=\paperwidth,height=0.95\paperheight,keepaspectratio]{#2}
}
\vfil
}
\end{textblock*}
#3
}
}
}
% fullFrameImageZoomed
%
% Produces a slide that contains a full frame image. If the aspect ratio
% of the image does not match the slide, it crops the image.
%
% Arguments:
%
% [optional]: color of text on page
% Default: black
%
% 1. Path to image file
% 2. Any additional content on the frame
%
% Example:
% \fullFrameImageZoomed{apollo17.jpg}{\copyrightText{Full frame image of: Apollo 17, NASA}}
%
\newcommand{\fullFrameImageZoomed}[3][black]
{
{
\usebackgroundtemplate{\includegraphics[height=\paperheight]{#2}}
\setbeamercolor{normal text}{bg=black,fg=#1}
\frame
{
#3
}
}
}

165
template_slides.md Normal file
View File

@ -0,0 +1,165 @@
---
title: Filtrage et classification de nuage de points sur la base d'attributs morphologiques
subtitle: ORASIS 2019 -- Classification
date: May 30, 2019
author:
- Florent Guiotte 🍆 \<<florent.guiotte@uhb.fr>\>
- Sébastien Lefèvre^+^
- Thomas Corpetti^*^
institute: ^*^Univ. Rennes 2 --- ^+^IRISA
theme: metropolis
aspectratio: 169
bibliography: all.bib
header-includes: |
\usepackage{pdfpc-commands}
\usepackage{qrcode}
\setbeamercolor{background canvas}{bg=white}
---
Context
=======
LiDAR Point Cloud
-----
:::: {.columns}
::: {.column width="50%"}
**LiDAR Point Cloud**
- 3D spatial data $P \in \mathbb{R}^3$
+ Voluminous (high density point cloud)
+ Continuously distributed
- LiDAR features for each point
+ Intensity
+ Number of echoes
+ ...
- Multispectral
:::
::: {.column width="50%"}
![](vid/paris.mp4)
:::
::::
::: notes
Airborne LiDAR systems are a common source of acquisition for elevation. They provide point clouds with higher and higher density.
LiDAR point clouds consist in 3D spatial data, with a set of points defined in space by x, y and z.
In addition to that, LiDAR point clouds comes with features extracted from the capture such as
- the laser intensity at the returned point,
- The number of echoes a pulse have returned, for some surfaces such as vegetation, the laser go through leaves of small branches and then can return several echoes, for example one point at the top of the canopy, and one point at the ground under the tree.
- and other metadata from the flight
some LiDARs are multispectral now, so we can also have several point cloud of the same scenery with intensities or number of echoes dependings of the wavelength.
:::
LiDAR Applications
---------
:::: {.columns}
::: {.column width="50%"}
**Urban Applications**
- Characterize structures
+ Buildings
+ Vegetation
+ ...
- Classification
:::
::: {.column width="50%"}
![LiDAR classification of a Paris street](img/paris.png)
:::
::::
::: notes
Some common LiDAR urban application are to characterize structures for
- heat island analysis for example
or to achieve classification
:::
Citations
--------
- Hierarchical @bosilj_partition_2018.
- Hierarchical [@bosilj_partition_2018]
- Hierarchical [-@bosilj_partition_2018]
- Hierarchical @bosilj_partition_2018 [p. 3]
Maths
-----
$$ \mathbb{R}^3 $$
Other
----
See [context][LiDAR Point Cloud].
```haskell
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
qsort (filter (>= x) xs)
```
- [ ] Not working
- [x] Working
| 200 Main St.
| Berkeley, CA 94718
Definition
--------
Term 1
: Definition 1
Term A
: Definition of the second term named A. Seriously.
Term 2
~ Definition 2a
~ Definition 2b
Term 2 with *inline markup*
: Definition 2
{ some code, part of Definition 2 }
Third paragraph of definition 2.
Broken
---
![Image manquante](img/manquante.png "Image manquante.")
::::: {#special .sidebar}
Here is a paragraph.
And another.
:::::
::: Warning ::::::
This is a warning.
::: Danger
This is a warning within a warning.
:::
::::::::::::::::::
References {.allowframebreaks}
=====
-----

BIN
vid/paris.mp4 Normal file

Binary file not shown.

44
video.py Normal file
View File

@ -0,0 +1,44 @@
#!/usr/bin/env python
# file video.py
# author Florent Guiotte <florent.guiotte@uhb.fr>
# version 0.0
# date 31 mai 2019
"""Abstract
doc.
"""
from panflute import *
from pathlib import Path
video_format = ('mp4', 'webm')
def create_thumbnail(fname):
thumbnail = fname.parent / (fname.stem + '.png')
if not thumbnail.is_file():
shell('ffmpeg -i {} -frames 1 {}'.format(fname, thumbnail))
return thumbnail
def video(elem, doc):
if isinstance(elem, Para) and isinstance(elem.content[0], Image):
img = elem.content[0]
url = Path(img.url)
if img.url.endswith(video_format):
if not url.is_file():
debug('video.py: {} does not exist.'.format(url))
return []
thumbnail = create_thumbnail(url)
shell('touch yay.txt')
if doc.format == 'beamer':
return convert_text('\inlineMovie[loop&autostart]{{{}}}{{{}}}{{}}'.format(img.url, thumbnail))
if doc.format == 'revealjs':
return convert_text('<video autoplay loop> \
<source data-src="{}" type="video/{}" /> \
</video>'.format(url, url.suffix.strip('.')))
def main(doc=None):
return run_filter(video, doc=doc)
if __name__ == '__main__':
main()