Initial commit
This commit is contained in:
commit
27ea6eb2bd
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.pdf
|
||||
*.html
|
38
Makefile
Normal file
38
Makefile
Normal 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
|
1
animate.sh
Normal file
1
animate.sh
Normal 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
BIN
img/paris.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 616 KiB |
163
pdfpc-commands.sty
Normal file
163
pdfpc-commands.sty
Normal 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}{\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
165
template_slides.md
Normal 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%"}
|
||||
|
||||

|
||||
|
||||
:::
|
||||
::::
|
||||
|
||||
::: 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%"}
|
||||

|
||||
:::
|
||||
::::
|
||||
|
||||
::: 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
|
||||
---
|
||||
|
||||

|
||||
|
||||
::::: {#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
BIN
vid/paris.mp4
Normal file
Binary file not shown.
44
video.py
Normal file
44
video.py
Normal 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()
|
Loading…
Reference in New Issue
Block a user