summaryrefslogtreecommitdiff
path: root/python-gco-wrapper.spec
blob: 5a5f2925173e8169390d1a22f084eb1e22e297f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
%global _empty_manifest_terminate_build 0
Name:		python-gco-wrapper
Version:	3.0.8
Release:	1
Summary:	pyGCO: a python wrapper for the graph cuts package
License:	MIT
URL:		http://vision.csd.uwo.ca/code/
Source0:	https://mirrors.nju.edu.cn/pypi/web/packages/f2/7c/f56206f0e6ebf7f9465f76bbac269959a3f1d46ad4b291794a6a63803762/gco-wrapper-3.0.8.tar.gz

Requires:	python3-Cython
Requires:	python3-numpy

%description
This is a python wrapper for [gco-v3.0 package](http://vision.csd.uwo.ca/code/), which implements a graph cuts based move-making algorithm for optimization in Markov Random Fields.
It contains a copy of the **gco-v3.0 package**.  Some of the design were borrowed from the [gco_python](https://github.com/amueller/gco_python) package. However, compared to gco_python:
* This package does not depend on Cython. Instead it is implemented using the ctypes library and a C wrapper of the C++ code.
* This package is an almost complete wrapper for gco-v3.0, which supports more direct low level control over GCoptimization objects.
* This package supports graphs with edges weighted differently.
This wrapper is composed of two parts, a C wrapper and a python wrapper.
## Implemented functions
 * **cut_general_graph**(...)
 * **cut_grid_graph**(...)
 * **cut_grid_graph_simple**(...)
## Building wrapper
1. download the last version of [gco-v3.0](http://vision.csd.uwo.ca/code/gco-v3.0.zip) to the _gco_source_
1. compile gco-v3.0 and the C wrapper using `make`
1. compile test_wrapper using `make test_wrapper`
1. run the C test code `./test_wrapper` (now you have the C wrapper ready)
```bash
make download
make all
make test_wrapper
./test_wrapper
```
The successful run should return:
```bash
labels = [ 0 2 2 1 ], energy=19
data energy=15, smooth energy=4
```
Next test the python wrapper using `python test_examples.py`, if it works fine you are ready to use pygco.
To include pygco in your code, simply import pygco module. See the documentation inside code for more details.
## Install wrapper
Clone repository and enter folder, then
```bash
pip install -r requirements.txt
python setup.py install
```
Now it can be also installed from PyPi
```bash
pip install gco-wrapper
```
## Show test results
Visualisation of the unary terns for **binary segmentation**
![unary terms](./images/binary_unary.png)
**4-connected** components with the initial labeling (left) and estimated labeling with regularisation **1** (middle) and **0** (right)
![labelling](./images/binary_labels-4conn.png)
**8-connected** components with the initial labeling (left) and estimated labeling with regularisation **1** (middle) and **0** (right)
![labelling](./images/binary_labels-8conn.png)
Visualisation of the unary terns for **3 labels segmentation**
![unary terms](./images/grid_unary.png)
with the __initial__ labeling (left) and __estimated__ labeling (right)
![labelling](./images/grid_labels.png)

%package -n python3-gco-wrapper
Summary:	pyGCO: a python wrapper for the graph cuts package
Provides:	python-gco-wrapper
BuildRequires:	python3-devel
BuildRequires:	python3-setuptools
BuildRequires:	python3-pip
BuildRequires:	python3-cffi
BuildRequires:	gcc
BuildRequires:	gdb
%description -n python3-gco-wrapper
This is a python wrapper for [gco-v3.0 package](http://vision.csd.uwo.ca/code/), which implements a graph cuts based move-making algorithm for optimization in Markov Random Fields.
It contains a copy of the **gco-v3.0 package**.  Some of the design were borrowed from the [gco_python](https://github.com/amueller/gco_python) package. However, compared to gco_python:
* This package does not depend on Cython. Instead it is implemented using the ctypes library and a C wrapper of the C++ code.
* This package is an almost complete wrapper for gco-v3.0, which supports more direct low level control over GCoptimization objects.
* This package supports graphs with edges weighted differently.
This wrapper is composed of two parts, a C wrapper and a python wrapper.
## Implemented functions
 * **cut_general_graph**(...)
 * **cut_grid_graph**(...)
 * **cut_grid_graph_simple**(...)
## Building wrapper
1. download the last version of [gco-v3.0](http://vision.csd.uwo.ca/code/gco-v3.0.zip) to the _gco_source_
1. compile gco-v3.0 and the C wrapper using `make`
1. compile test_wrapper using `make test_wrapper`
1. run the C test code `./test_wrapper` (now you have the C wrapper ready)
```bash
make download
make all
make test_wrapper
./test_wrapper
```
The successful run should return:
```bash
labels = [ 0 2 2 1 ], energy=19
data energy=15, smooth energy=4
```
Next test the python wrapper using `python test_examples.py`, if it works fine you are ready to use pygco.
To include pygco in your code, simply import pygco module. See the documentation inside code for more details.
## Install wrapper
Clone repository and enter folder, then
```bash
pip install -r requirements.txt
python setup.py install
```
Now it can be also installed from PyPi
```bash
pip install gco-wrapper
```
## Show test results
Visualisation of the unary terns for **binary segmentation**
![unary terms](./images/binary_unary.png)
**4-connected** components with the initial labeling (left) and estimated labeling with regularisation **1** (middle) and **0** (right)
![labelling](./images/binary_labels-4conn.png)
**8-connected** components with the initial labeling (left) and estimated labeling with regularisation **1** (middle) and **0** (right)
![labelling](./images/binary_labels-8conn.png)
Visualisation of the unary terns for **3 labels segmentation**
![unary terms](./images/grid_unary.png)
with the __initial__ labeling (left) and __estimated__ labeling (right)
![labelling](./images/grid_labels.png)

%package help
Summary:	Development documents and examples for gco-wrapper
Provides:	python3-gco-wrapper-doc
%description help
This is a python wrapper for [gco-v3.0 package](http://vision.csd.uwo.ca/code/), which implements a graph cuts based move-making algorithm for optimization in Markov Random Fields.
It contains a copy of the **gco-v3.0 package**.  Some of the design were borrowed from the [gco_python](https://github.com/amueller/gco_python) package. However, compared to gco_python:
* This package does not depend on Cython. Instead it is implemented using the ctypes library and a C wrapper of the C++ code.
* This package is an almost complete wrapper for gco-v3.0, which supports more direct low level control over GCoptimization objects.
* This package supports graphs with edges weighted differently.
This wrapper is composed of two parts, a C wrapper and a python wrapper.
## Implemented functions
 * **cut_general_graph**(...)
 * **cut_grid_graph**(...)
 * **cut_grid_graph_simple**(...)
## Building wrapper
1. download the last version of [gco-v3.0](http://vision.csd.uwo.ca/code/gco-v3.0.zip) to the _gco_source_
1. compile gco-v3.0 and the C wrapper using `make`
1. compile test_wrapper using `make test_wrapper`
1. run the C test code `./test_wrapper` (now you have the C wrapper ready)
```bash
make download
make all
make test_wrapper
./test_wrapper
```
The successful run should return:
```bash
labels = [ 0 2 2 1 ], energy=19
data energy=15, smooth energy=4
```
Next test the python wrapper using `python test_examples.py`, if it works fine you are ready to use pygco.
To include pygco in your code, simply import pygco module. See the documentation inside code for more details.
## Install wrapper
Clone repository and enter folder, then
```bash
pip install -r requirements.txt
python setup.py install
```
Now it can be also installed from PyPi
```bash
pip install gco-wrapper
```
## Show test results
Visualisation of the unary terns for **binary segmentation**
![unary terms](./images/binary_unary.png)
**4-connected** components with the initial labeling (left) and estimated labeling with regularisation **1** (middle) and **0** (right)
![labelling](./images/binary_labels-4conn.png)
**8-connected** components with the initial labeling (left) and estimated labeling with regularisation **1** (middle) and **0** (right)
![labelling](./images/binary_labels-8conn.png)
Visualisation of the unary terns for **3 labels segmentation**
![unary terms](./images/grid_unary.png)
with the __initial__ labeling (left) and __estimated__ labeling (right)
![labelling](./images/grid_labels.png)

%prep
%autosetup -n gco-wrapper-3.0.8

%build
%py3_build

%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
	find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
	find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
	find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
	find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
	find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .

%files -n python3-gco-wrapper -f filelist.lst
%dir %{python3_sitearch}/*

%files help -f doclist.lst
%{_docdir}/*

%changelog
* Tue May 30 2023 Python_Bot <Python_Bot@openeuler.org> - 3.0.8-1
- Package Spec generated